多维数组改变键值对

时间:2015-08-28 18:11:27

标签: php arrays multidimensional-array

我有以下数据数组 -

      0         1
#1   "Fname"  "Lname"
#2   "Tom"    "Shaw"
#3   "Marc"   "Hob"
#4   "Sim"    "Pow"

我想把它改成一个键值对,其中“Fname”将是“Tom”,“Mark”和&的键。 “Sim”和“Lname”将成为“Shaw”,“Hob”和“Lname”的关键。 “的Pow。

如果我遍历此数组 -

foreach ($data as $key=>$value) {
    echo $key.'<br>';
    foreach ($value as $v) {
        echo $v.'<br>';
    }
}

我得到以下输出 -

0
Fname
Lname
1
Tom
Shaw
2
Marc
Hob
3
Sim
Pow

这表明'Fname,Lname','Tom,Shaw'等是另一组数组, 我只想把它作为键值对。

我是php编程的新手,非常感谢编程忍者的帮助来解决这个问题。

谢谢。

4 个答案:

答案 0 :(得分:1)

这应该做你想要的:

$new_array = array();

foreach ($data as $value) 
{
  $new_array[] = array('Fname' => $value[0], 'Lname' => $value[1]);
}

答案 1 :(得分:1)

我认为@Marcovecchio走在正确的轨道上,但并不是很明显。基于他的代码,您可以使用:

<?php

// create your new array
$new_array = array();

// pull 'Fname' and 'Lname' off original array, and set them as $col
$col = array_shift($data);

// iterate through original array, which now contains just names
foreach ($data as $value) {

    // set $col values as keys for each element
    $new_array[] = array($col[0] => $value[0], $col[1] => $value[1]);
}

// output what we just made
print_r($new_array);

?>

输出:

Array ( 
    [0] => Array ( 
        [Fname] => Tom 
        [Lname] => Shaw 
    ) 
    [1] => Array ( 
        [Fname] => Marc 
        [Lname] => Hob 
    ) 
    [2] => Array ( [
        Fname] => Sim 
        [Lname] => Pow 
    ) 
) 

注意:这假设列数始终为2.

答案 2 :(得分:1)

以这种方式:

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

但循环可能更简单:

$keys = array_shift($data);
foreach($data as $vals) {
    $result[] = array_combine($keys, $vals);
}

答案 3 :(得分:0)

这是你想要的吗?如果是,请作为最佳答案;)

$arr = array(array('Fname','Lname'), array('Tom','Shaw'), array('Marc','Hob'), array('Sim','Pow'));

$out = array();

foreach($arr[0] as $cols){
        $out[$cols] = array();
}

foreach($arr as $key => $row){
    $i = '0';
    if($key != '0'){
        foreach($out as $out_key=>$out_row){
            $out[$out_key][] = $row[$i];
            $i++;
        }
    }
}

print_R($out);

<强>输出

Array (
    [Fname] => Array
        (
            [0] => Tom
            [1] => Marc
            [2] => Sim
        )

    [Lname] => Array
        (
            [0] => Shaw
            [1] => Hob
            [2] => Pow
        )

)