2016-07-15 135 views
0

关联数组的数组必须转换为关联数组,其关键字是这些关联数组中的一个键的值。例如,此阵:关联数组的数组关联数组,索引于键的值

$source = array(array("key" => "a", "value" => "1"), 
       array("key" => "b", "value" => "2"), 
       array("key" => "a", "value" => "3"), 
       array("key" => "b", "value" => "4")); 

必须转换为以下关联数组的基础上,重点“钥匙”值:

$dest = array("a" => array(array("key" => "a", "value" => "1"), 
          array("key" => "a", "value" => "3")), 
       "b" => array(array("key" => "b", "value" => "2"), 
          array("key" => "b", "value" => "4"))); 

这是我会做什么:

$dest = array(); 
foreach($source as $elem) { 
    $key = $elem["key"]; 
    if(!array_key_exists($key, $dest)){ 
     $dest[$key] = array(); 
    } 
    array_push($dest[$key], $elem); 
} 

有没有更习惯的方法?

回答

1

您可以使用简单的foreach东西它:

$source_arr = array(array("key" => "a", "value" => "1"), 
       array("key" => "b", "value" => "2"), 
       array("key" => "a", "value" => "3"), 
       array("key" => "b", "value" => "4")); 

$destination_arr = array(); 
foreach ($destination_arr as $k => $v) 
{ 
    $key = $v['key']; 
    $destination_arr[$key][$k] = array('key' => $v['key'], 'value' => $v['value']); 
} 

print_r($destination_arr); 
0

更改了这一点。

<?php 
     $dest = array(array("key" => "a", "value" => "1"), 
        array("key" => "b", "value" => "2"), 
        array("key" => "a", "value" => "3"), 
        array("key" => "b", "value" => "4")); 
     $result = array(); 
     foreach($dest as $elem) { 
      $result[$elem['key']][] = ["key"=>$elem['key'],"value"=>$elem['value']]; 
     } 
     print_r($result); 
    ?> 

检查:https://eval.in/605983

输出是:

Array 
(
    [a] => Array 
     (
      [0] => Array 
       (
        [key] => a 
        [value] => 1 
       ) 

      [1] => Array 
       (
        [key] => a 
        [value] => 3 
       ) 

     ) 

    [b] => Array 
     (
      [0] => Array 
       (
        [key] => b 
        [value] => 2 
       ) 

      [1] => Array 
       (
        [key] => b 
        [value] => 4 
       ) 

     ) 

) 
+0

仅供参考,'= [ “键”=> $ ELEM [ '键'], “值”=> $ ELEM [ 'value']];'可以被替换='$ elem;'?请参阅:https://eval.in/606075;稍后将删除此评论。 –