如何将标头添加到其他PHP数组

时间:2013-07-02 18:18:29

标签: php arrays sorting data-structures

这是原始数组:

Array
(
    [0] => Array
        (
            [0] => ID
            [1] => NAME
            [2] => GROUP
        )

    [1] => Array
        (
            [0] => 1221
            [1] => 500
            [2] => 2
        )
    [2] => Array
        (
            [0] => 1654
            [1] => 33
            [2] => 23
        )
)

将其转换为:

Array
(
    [0] => Array
        (
            [ID]    => 1221
            [NAME]  => 500
            [GROUP] => 2
        )
    [1] => Array
        (
            [ID]    => 1654
            [NAME]  => 33
            [GROUP] => 23
        )
)

当然,有超过3个标题和超过2个数据数组。是否有一种自动的方式来有效和干净地做到这一点?

3 个答案:

答案 0 :(得分:1)

$header = $array[0];
$newarray = array();
for($i = 1; $i<count($array); $i++) {
    $newarray[$i-1] = array();
    foreach($header as $k => $v) {
        $newarray[$i-1][$v] = $array[$i][$k];
    }
}


print_r($newarray);

答案 1 :(得分:1)

您可以尝试:

$keys = array_shift($data);
$data = array_map(function ($v) use($keys) {
    return array_combine($keys, $v);
}, $data);

print_r($data);

Live DEMO

答案 2 :(得分:1)

我对这个问题的回答是使用PHP内置函数,如array_valuesarray_fillarray_combinearray_map

工作示例http://phpfiddle.org/lite/code/zdw-v9k

function array_mapper($keys, $record) {
    return array_combine($keys, $record);
}

$key = array_values(array_shift($arr));
$keys = array_fill(0, count($arr), $key);
$res = array_map('array_mapper', $keys, $arr);

print_r($res);