2016-03-31 2 views
0

Как объединить два массива для цикла foreach.PHP Комбинированные массивы для цикла Foreach

У меня есть два массива для вывода в петлю foreach.

Благодарим вас за помощь.

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 yes Мне нужно зацикливать оба массива для получения в foreach, который у вторичного массива имеет идентификатор из первичного массива – cocksparrer

+0

Итак, отношение между двумя массивами является элементом id? Не позиция каждого subArray. И если да, может быть, у вас есть несколько подархивов с одним и тем же идентификатором? – Rizier123

ответ

2

Итак, для получения ожидаемого результата необходимо несколько разных вещей.

Чтобы получить все связанные массивы из вашего второго массива для каждого идентификатора вашего первого массива, вы можете использовать array_filter(), чтобы отфильтровать именно те подархивы.

Затем, когда вы распечатываете данные из связанных массивов, вы можете использовать array_column(), чтобы получить конкретные данные, которые вы хотите показать из каждого subArray, и 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 Это должно просто показать, как вы можете использовать fruid_id из вашего второго массива, чтобы получить имя из вашего первого массива. Если ваша проблема заключается в том, как печатать выходные данные в этом формате, я могу обновить свой ответ. – Rizier123

+0

да, пожалуйста, дайте мне пример вывода печати? Спасибо. – cocksparrer

Смежные вопросы