2016-07-15 12 views
0

連想配列の配列は、それらの連想配列の1つのキーの値をキーとする連想配列に変換する必要があります。例えば、この配列:連想配列から連想配列への配列、キーの値でインデックス付けされた配列

$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"))); 

これは私がどうなるのかです::

$source = array(array("key" => "a", "value" => "1"), 
       array("key" => "b", "value" => "2"), 
       array("key" => "a", "value" => "3"), 
       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;このコメントは後で削除されます。 –