は1

2017-04-24 6 views
0

に連想配列の子を組み合わせ、私は、この構造を連想配列(実際にはLaravelコレクションを)持っている:は1

array(3) { 
    [0] => array(4) { 
     ["firstname"] => string(21) "John" 
     ["lastname"] => string(0) "" 
     ["email"] => string(0) "" 
     ["uri"] => string(0) "" 
    } 
    [1] => array(4) { 
     ["firstname"] => string(0) "" 
     ["lastname"] => string(22) "Smith" 
     ["email"] => string(0) "" 
     ["uri"] => string(0) "" 
    } 
    [2] => array(4) { 
     ["firstname"] => string(0) "" 
     ["lastname"] => string(0) "" 
     ["email"] => string(19) "[email protected]" 
     ["uri"] => string(0) "" 
    } 
} 

は、どのように私は自分自身で全部を組み合わせることができますので、私は次のように終わりますか?

予想される出力:

array(3) { 
    [0] => array(4) { 
     ["firstname"] => string(21) "John" 
     ["lastname"] => string(0) "Smith" 
     ["email"] => string(0) "[email protected]" 
     ["uri"] => string(0) "" 
    } 
} 

私はそれが非常に簡単ません確信しているが、今、私は木のために森を欠場...事前に感謝します。

答えて

1

ここではarray_mergearray_filterを使用しています。 array_mergeは配列を別の配列にマージし、array_filterは配列に空の値をフィルタリングします。

Try this code snippet here

<?php 

$array = array(
    0 => array(
     "firstname" => "John", 
     "lastname" => "", 
     "email" => "", 
     "uri" => "" 
    ), 
    1 => array(
     "firstname" => "", 
     "lastname" => "Smith", 
     "email" => "", 
     "uri" => "" 
    ), 
    2 => array(
     "firstname" => "", 
     "lastname" => "", 
     "email" => "[email protected]", 
     "uri" => "") 
); 
$result=array(); 
foreach($array as $value) 
{ 
    $result= array_merge($result,array_filter($value)); 
} 
$result["uri"]=""; 
print_r(array($result)); 
1

プロセスが完了した後、手動で不足しているuriキーの値を補正するためサヒールの答えは、信頼できる/非常に堅牢ではありません。欠けている値がプログラマに「知られている」ため、この調整は純粋に行われます。プログラマチックに言えば、これは怠惰で、失敗する傾向があり、SOの読者は使用しないでください。

これは、機能が少なくて済むため、速く実行される方法ですが、ベンチマークテストをするのは面倒ではありませんでした。すべてのサブアレイ要素は結果配列として$array[0]に結合されます。

入力:

$array= [ 
      ["firstname"=>"John","lastname"=>"","email"=>"","uri"=>""], 
      ["firstname"=>"","lastname"=>"Smith","email"=>"","uri"=>""], 
      ["firstname"=>"","lastname"=>"","email"=>"[email protected]","uri"=>""] 
     ]; 

方法:

$result=array_splice($array,0,1); // preserve all "columns" 
foreach($array as $subarray){ 
    foreach($subarray as $k=>$v){ 
     if($v!=''){$result[0][$k]=$v;} // only overwrite where a non-empty value exists 
    } 
} 
var_export($result); 

出力:

array (
    'firstname' => 'John', 
    'lastname' => 'Smith', 
    'email' => '[email protected]', 
    'uri' => '', 
) 

これはarray_merge()array_filter()を使用して、正しい/ロバストな方法であって、

$result=array_splice($array,0,1); 
foreach($array as $subarray){ 
    $result[0]=array_merge($result[0],array_filter($subarray,'strlen')); 
} 
var_export($result); 

*注、あなたの実際のプロジェクトがあなたの投稿を4つのフィールドとこれらのフィールドの1以上のものを持っているだけの場合に、あなたはフィルタリングしたくないゼロ値を保持するパラメータとしてstrlenを使用することができますarray_filter()にあります。