2012-02-18 81 views
-2

我有此数组:如何将数组转换为键值对数组?

array(
    0 => array("name", "address", "city"), 
    1=> array("anoop", "palasis", "Indore"), 
    2=> array("ravinder", "annapurna", "Indore") 
) 

,我想使这个数组中这样说:

array( 
    0 => array("name" = >"anoop" , "address" = >"palasia", "city" = >"Indore"), 
    1 => array("name" = >"ravinder" , "address" = >"annapurna", "city" = >"Indore") 
) 
+0

在你的问题请注明(如果)你想为关键字的第一个元素使用的项目。 – 2012-02-18 18:07:09

+0

我想将该数组放入键值对中...请帮助我。 – 2012-02-18 18:08:43

回答

4

使用array_combine。如果$array包含您的数据

$result = array(
      array_combine($array[0], $array[1]), 
      array_combine($array[0], $array[2]) 
     ); 

一般

$result = array(); 
$len = count($array); 
for($i=1;$i<$len; $i++){ 
    $result[] = array_combine($array[0], $array[$i]); 
} 
0

假设你解析一个CSV文件,检查出这个问题的答案:

Get associative array from csv

+0

无论是近距离投票还是评论。它不能回答。[应该我们标志答案只有包含一个链接到另一个答案](http://meta.stackexchange.com/questions/95491/should-我们旗 - 答案 - 即只-含有-一个链接到另一个那么答案)。 – 2012-02-18 18:20:30

+0

谢谢,我已阅读讨论。然而,我不同意,并且认为在链接到引用*关联数组*的概念的问题上有一些附加价值,OP以前没有提及。 – 2012-02-18 18:32:04

1

如果您的数据在$array

$res = array(); 
foreach ($array as $key=>$value) { 
    if ($key == 0) { 
     continue; 
    } 
    for ($i = 0; $i < count($array[0]); $i++) { 
     $res[$array[0][$i]] = $value[$i]; 
    } 
} 

结果现在在$res

+0

-1不仅为内循环而且在外循环中执行count()。 – 2012-02-18 18:13:46

+0

@Phoenix效率甚至在这里有意义吗?你是认真的吗? – Borealid 2012-02-18 18:14:05

+1

这是一个不好的做法。 OP中显示的数组有2行要处理,但数组可能已被截断以便在此处发布;它可能实际上拥有数千条记录。或者有人可能会遇到这个答案,同时解决类似的问题,并采取坏习惯。 – 2012-02-18 18:17:38

1

这里是你可以使用函数:

function rewrap(Array $input){ 
    $key_names = array_shift($input); 
    $output = Array(); 
    foreach($input as $index => $inner_array){ 
     $output[] = array_combine($key_names,$inner_array); 
    } 
    return $output; 
} 

这里是一个演示:

// Include the function from above here 
$start = array(
    0 => array("name", "address", "city"), 
    1 => array("anoop", "palasis", "Indore"), 
    2 => array("ravinder", "annapurna", "Indore") 
); 
print_r(rewrap($start)); 

此输出:

Array 
(
    [0] => Array 
     (
      [name] => anoop 
      [address] => palasis 
      [city] => Indore 
     ) 

    [1] => Array 
     (
      [name] => ravinder 
      [address] => annapurna 
      [city] => Indore 
     ) 

) 

注:您的第一个数组定义索引1两次,所以我改变了第二个o ne到2,像这样:

array(0 => array("name", "address", "city"), 1 => array("anoop", "palasis", "Indore"),2 => array("ravinder", "annapurna", "Indore")) 

这可能只是一个错字。

1

现代化的方法是:

$data = array_column($data, 'value', 'key'); 

你的情况:

$data = array_column($data, 1, 0); 
相关问题