У меня возникают трудности с манипулированием массивом ниже. Я пробовал разные вещи, и я чувствую, что должен быть простой способ добиться этого, но я не могу понять это. Любые советы или помощь значительно оценили, спасибо!
Array ( [0] => Array ( [0] => Array ( [Color] => Blue ) [1] => Array ( [Size] => S ) ) [1] => Array ( [0] => Array ( [Color] => Blue ) [1] => Array ( [Size] => M ) ) )
Мой желаемый результат:
Array ( [0] => Array ( [Color] => Blue [Size] => S ) [1] => Array ( [Color] => Blue [Size] => M ) )
Это работает:
$items = array( array( array("Color" => "Blue"), array("Size" => "S") ), array( array("Color" => "Blue"), array("Size" => "M") ) ); $new_items = array(); foreach ($items as $item) { $collect = array(); foreach ($item as $values) { foreach ($values as $key => $value) { $collect[$key] = $value; } } $new_items[] = $collect; } var_dump($new_items);
Ваш массив имеет 3 глубины, поэтому вам нужно как минимум 3 вложенных цикла.
Вывод:
array(2) { [0]=> array(2) { ["Color"]=> string(4) "Blue" ["Size"]=> string(1) "S" } [1]=> array(2) { ["Color"]=> string(4) "Blue" ["Size"]=> string(1) "M" } }
2 цикла достаточно с array_merge
$a = array( array( array( 'Color' => 'Blue' ), array( 'Size' => 'S' ), ), array( array( 'Color' => 'Blue' ), array( 'Size' => 'M' ), ), ); $c = array(); foreach($a as $b) { $ca = array(); if(is_array($b)) { foreach($b as $array) { $ca = array_merge($ca, $array); } $c[] = $ca; } } echo '<pre>'.print_r($c,true);
Вы можете использовать array_map для этого:
<?php function combine($elementArray) { return array($elementArray[0]["Color"], $elementArray[1]['Size']); } $originalArray = array( 0 => array( 0 => array("Color" => "Blue"), 1 => array("Size" => "S") ), 1 => array( 0 => array( "Color" => "Blue"), 1 => array("Size" => "M") ) ); $combinedArray = array_map("combine", $originalArray); echo "<pre>"; print_r($combinedArray); ?>
Также вы можете использовать анонимные функции и делать это как про;)
$combinedArray = array_map( function($element){ return array( "Color" => $element[0]["Color"], "Size" => $element[1]['Size'] ); },$originalArray);
Или вы даже можете использовать пример array_reduce:
$reducedArray = array_reduce($originalArray, function($result, $item){ $result[] = array( 'Color' => $item[0]['Color'], 'Size' => $item[1]['Size'] ); return $result; });
Надеюсь, это поможет
$array = array( array( array( 'color'=>'Blue' ), array( 'size'=>'s' ) ), array( array( 'color'=>'Red' ), array( 'size'=>'m' ) ) ); $mA = array(); foreach($array as $k=>$a){ array_push($mA,array_merge($a[0],$a[1])); } var_dump($mA);