@BushaevDenis

Как перебрать многомерный массив?

Допустим есть массив:
array(2) {
	["color"]=>
		[1]=>
			  ["id"]=> "1"
			  ["name"]=> "Цвет"
			  ["value"]=> "красный"
			  ["photo"]=> "http://google.com/"
		[2]=>
			  ["id"]=>  "2"
			  ["name"]=> "Цвет"
			  ["value"]=> "зеленый"
			  ["photo"]=> "http://google.com/"
	["razmer"]=>
		[1]=>
			  ["id"]=> "1"
			  ["name"]=> "Размер"
			  ["value"]=> "900х2000"
			  ["photo"]=> "http://google.com/"
		[2]=>
			  ["id"]=> "2"
			  ["name"]=>  "Размер"
			  ["value"]=> "800х2000"
			  ["photo"]=> "http://google.com/"
		[3]=>
			  ["id"]=> "3"
			  ["name"]=>  "Размер"
			  ["value"]=>  "700х2000"
			  ["photo"]=> "http://google.com/"
		[4]=>
			  ["id"]=> "4"
			  ["name"]=> "Размер"
			  ["value"]=> "600х2000"
			  ["photo"]=> "http://google.com/"
}

Как мне перебрать все цвета на размеры, т.е.: Красный 900x200, Красный 800x200, зелёный 700x2000 и т.д.
Вернее как сделать это с 2 массивами понятно, но как учесть то, что могут появится элементы первого уровня, т.е уже их будет 3, а не 2, допустим.
Например Цвет, размер, материал. И тогда нужно будет перебирать 3, 4, 5 и т.д. массива между собой.
  • Вопрос задан
  • 1670 просмотров
Решения вопроса 1
twobomb
@twobomb
<?PHP
$arr = 
    array("color"=>array(
        array(
        "id"=> "1",
        "name"=> "Цвет",
        "value"=> "красный",
        "photo"=> "http://google.com/"),
        array(
        "id"=>  "2",
        "name"=> "Цвет",
        "value"=> "зеленый",
        "photo"=> "http://google.com/"
        )
     ),
     "razmer"=>array(
        array(
        "id"=> "1",
        "name"=> "Размер",
        "value"=> "900х2000",
        "photo"=> "http://google.com/"
        ),
         array(
        "id"=> "2",
        "name"=>  "Размер",
        "value"=> "800х2000",
        "photo"=> "http://google.com/"
         ),
         array(
        "id"=> "3",
        "name"=>  "Размер",
        "value"=>  "700х2000",
        "photo"=> "http://google.com/"
         ),
         array(
        "id"=> "4",
        "name"=> "Размер",
        "value"=> "600х2000",
        "photo"=> "http://google.com/"
         )
     )
     );

function getMix($arr,$charr = null,$n = null){
    if(!isset($n))
        $n = 0;
    $tmpArr = array_values($arr);
    if(!isset($charr))
        $charr = array();
    $str = "";
    for($i = 0; $i < count($tmpArr[$n]);$i++){
        $mycharr = $charr;
        array_push($mycharr,$tmpArr[$n][$i]["value"]);
        if($n < count($tmpArr)-1)
            $str .= getMix($arr,$mycharr,$n+1);
        else{
            for($j = 0; $j < count($mycharr);$j++)
                $str .= $mycharr[$j]." ";
            $str .= "<br>";
        }
    }
    return $str;
}
   echo getMix($arr);
?>

красный900х2000
красный800х2000
красный700х2000
красный600х2000
зеленый900х2000
зеленый800х2000
зеленый700х2000
зеленый600х2000
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
Не понимаю в чем проблема
foreach($arr as $one){
   foreach($one as $item){
      echo $item['name'] . ': ' . item['value'];
   }
}

а если отдельно надо то еще проще
foreach($arr['color'] as $item){
      echo $item['name'] . ': ' . item['value'];
}
///some code
foreach($arr['someelse'] as $item){
      echo $item['name'] . ': ' . item['value'];
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы