使用foreach循环转换数组

时间:2016-12-19 06:39:44

标签: php arrays loops

您好我有这样的数组。

$myarray = Array(
[0] => Array
    (
        [0] => Type
        [1] => Brand
    )

[1] => Array
    (
        [0] => Car
        [1] => Toyota
    )

)

我想要这样的结果。

Type = Car

品牌=丰田

所以它的平均值从第一个数组“0”的值将是echo,然后从第二个数组“0”将显示值。

然后从第一个数组中显示“1”值然后从第二个数组“1”显示值将显示。

此外,我不知道将会有多少阵列,所以它需要是动态的。

请帮忙吗?

2 个答案:

答案 0 :(得分:1)

你可以试试这样的东西(现在我已经测试过了!):

foreach($myarray[0] as $titleKey=>$title) {
    echo $title . " = ";
    for($i = 1;$i<count($myarray);$i++) {
        echo $myarray[$i][$titleKey] . ",";
    }
    echo "</br>";
}

答案 1 :(得分:0)

array_combine用于此

$myarray = [
  ['Type', 'Brand'],
  ['Car', 'Toyota']
];

list($fields, $values) = $myarray;

$output = array_combine($fields, $values);

echo json_encode($output, JSON_PRETTY_PRINT);

// {
//     "Type": "Car",
//     "Brand": "Toyota"
// }

但正如你所说,它可能比丰田更有价值,所以你必须这样做

$myarray = [
  ['Type', 'Brand'],
  ['Car', 'Toyota'],
  ['Horse', 'Seabiscuit']
];

function first ($xs) { return $xs[0]; }
function rest ($xs) { return array_slice($xs, 1); }

$output = array_map(function ($values) use ($myarray) {
  return array_combine(first($myarray), $values);
}, rest($myarray));

echo json_encode($output, JSON_PRETTY_PRINT);

// [
//     {
//         "Type": "Car",
//         "Brand": "Toyota"
//     },
//     {
//         "Type": "Horse",
//         "Brand": "Seabiscuit"
//     }
// ] 

注意,这个最终解决方案假设第一个数组包含字段名称,其余数组将包含值

当然,这也适用于添加更多字段的情况。不需要更改代码。

$myarray = [
  ['Type', 'Brand', 'Origin'],
  ['Car', 'Toyota', 'Japan'],
  ['Horse', 'Seabiscuit', 'Kentucky']
];

function first ($xs) { return $xs[0]; }
function rest ($xs) { return array_slice($xs, 1); }

$output = array_map(function ($values) use ($myarray) {
  return array_combine(first($myarray), $values);
}, rest($myarray));

echo json_encode($output, JSON_PRETTY_PRINT);

// [
//     {
//         "Type": "Car",
//         "Brand": "Toyota",
//         "Origin": "Japan"
//     },
//     {
//         "Type": "Horse",
//         "Brand": "Seabiscuit",
//         "Origin": "Kentucky"
//     }
// ]