2016-03-31 13 views
0

foreachループ用に2つの配列を結合する方法。PHPはForeachループ用の配列を結合します

私はforeachループの結果として2つの配列を持っています。

ありがとうございました。

Primary Array: 

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [name] => Grape 
      [date_created] => 2016-03-30 14:19:12 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [name] => Coconut 
      [date_created] => 2016-03-30 14:22:54 
     ) 

-

Secondary Array: 

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [fruit_id] => 1 
      [item_id] => 1 
      [ppk] => 0 
      [ppo] => 2342420 
      [image] => 6450983014191211.jpg 
      [url] => 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [fruit_id] => 1 
      [item_id] => 10 
      [ppk] => 343353 
      [ppo] => 0 
      [image] => 64509830141912110.jpg 
      [url] => http://yahoo.com 
     ) 

    [2] => Array 
     (
      [id] => 3 
      [fruit_id] => 2 
      [item_id] => 1 
      [date_created] => 2016-03-30 14:22:54 
      [date_last_change] => 2016-03-30 14:14:48 
      [ppk] => 0 
      [ppo] => 2323120 
      [image] => 6450983014225421.jpg 
      [url] => 
     ) 

    [3] => Array 
     (
      [id] => 4 
      [fruit_id] => 2 
      [item_id] => 11 
      [date_created] => 2016-03-30 14:22:54 
      [date_last_change] => 2016-03-30 14:14:48 
      [ppk] => 232342000 
      [ppo] => 0 
      [image] => 64509830142254211.jpg 
      [url] => http://msn.com 
     ) 

    [4] => Array 
     (
      [id] => 5 
      [fruit_id] => 2 
      [item_id] => 12 
      [date_created] => 2016-03-30 14:22:54 
      [date_last_change] => 2016-03-30 14:14:48 
      [ppk] => 34343400 
      [ppo] => 0 
      [image] => 64509830142254212.jpg 
      [url] => http://fussball.com 
     ) 

注:

"fruit_idは" プライマリアレイ

、結果における "ID" のフィールドから取られ

フィールド:

//When I'm doing foreach loop, it should must result like this: 

ID: 1 
Fruit Name: Grape 
Item ID: 1|10 
PPK: 0|343353 
PPO: 2342420|0 
Image: 6450983014191211.jpg|64509830141912110.jpg 
URL: ""|http://yahoo.com 

------------------------------------------------------------------------ 

ID: 2 
Fruit Name: Coconut 
Item ID: 1|11|12 
PPK: 0|232342000|232342000 
PPO: 2323120|0|0 
Image: 6450983014225421.jpg|64509830142254211.jpg|64509830142254212.jpg 
URL: ""|http://msn.com|http://fussball.com 

助けてください。

ありがとうございます。

+0

類似した:http://stackoverflow.com/q/32061254/3933332これで、両方の配列のデータを両方の配列にまとめて出力することができます。 – Rizier123

+0

@ Rizier123はい私は二次配列がプライマリ配列のIDを持っているforeachの結果として両方の配列をループする必要があります – cocksparrer

+0

したがって、2つの配列の間の関係はid要素ですか?各サブアレイの位置ではありません。あなたが同じIDを持つ複数のサブアレイを持つことができますか? – Rizier123

答えて

2

期待される出力を得るには、いくつかのことが必要です。

最初の配列の各IDに対して2番目の配列からすべての関連配列を取得するには、array_filter()を使用して、それらのサブ配列を正確にフィルタリングできます。

次に、関連する配列からデータを出力するときに、array_column()を使用して、各サブアレイから表示する特定のデータを取得し、implode()を文字列に変換することができます。

空の値をすべて""と表示する場合は、出力するデータをarray_map()ですばやくループして置き換えます。

セパレータの場合は、最後の要素かどうかを確認したり、セパレータを印刷しない場合はチェックしたりできます。

$last = count($firstArray) - 1; 
foreach($firstArray as $k => $v){ 

    $related = array_filter($secondArray, function($value)use($v){ 
     return $value["fruit_id"] == $v["id"]; 
    }); 

    echo "ID: " . $v["id"] . PHP_EOL; 
    echo "Fruit Name: " . $v["name"] . PHP_EOL; 
    echo "Item ID: " . implode("|", array_column($related, "item_id")) . PHP_EOL; 
    echo "PPK: " . implode("|", array_column($related, "ppk")) . PHP_EOL; 
    echo "PPO: " . implode("|", array_column($related, "ppo")) . PHP_EOL; 
    echo "Image: " . implode("|", array_column($related, "image")) . PHP_EOL; 
    echo "Url: " . implode("|", array_map(function($v){return $v == "" ? '""' : $v;}, array_column($related, "url"))) . PHP_EOL; 


    if($k != $last) 
     echo PHP_EOL . "------------------------------------------------------------------------" . PHP_EOL . PHP_EOL; 

} 
+0

結果として何も見えません:) – cocksparrer

+0

@cocksparrerこれは、2番目の配列のfruid_idを使って最初の配列から名前を取得する方法を示しています。その形式で出力を印刷する方法が問題なら、私は自分の答えを更新できます。 – Rizier123

+0

はい、出力印刷の例を教えてください。ありがとうございました。 – cocksparrer