У меня многомерный массив $array["A"]["B"]["C"]["D"]
. Список длиннее. Есть ли подстановочный знак, который я могу использовать для получения значения ["D"] в let say ["B"] массив? Что-то вроде этого, $array["A"]["B"][*]["D"]
? или $array[*]["B"][*]["D"]
?
Например, я хотел бы получить все цены, которые были куплены в феврале, независимо от года.
$array[2013][2][23]["ItemName"]["ItemPrice"] .....
Если бы это сработало, было бы действительно замечательно
$array[*][2][*][*]["ItemPrice"]..
Есть идеи?
Благодаря @Sepehr-Farshid мне просто пришло в голову, что я могу использовать рекурсивную функцию (что-то, что я не использую для спокойствия. Вот пример.
$newarray = array();
$tempArray = $oldarray;
$levels[] = 1;
$keys[] = 2;
$levels[] = 4;
$keys[] = "ItemPrice";
$lastLevel =4;
recurArray($tempArray, 0);
function recurArray($array, $level)
{
foreach($array as $key => $value) {
if(array_search($level, $GLOBALS["levels"]) {
$tempKey = array_search($level, $GLOBALS["levels"];
if($key == $GLOBALS["keys"][$tempKey] {
if($level == $GLOBALS["lastLevel"]) $GLOBALS["newarray"] = $value;
else recurArray($value, $level + 1);
}
else { return; }
}
else { recurArray($value, $level + 1); }
}
}
это может быть не оптимальный способ, но он будет работать и может быть уточнен. : D
Вы можете сделать несколько foreach
для цикла, хотя каждый вложенный массив, который вы хотите зацикливать.
foreach ($array as $a) {
foreach ($a["B"] as $c) {
foreach ($c as $d) {
// Do something with $d
}
}
}
Это будет $array[*]["B"][*][*]
Edit: Вы могли бы объединить мое предложение с в while
цикл.
$innerArray = $array;
while (true) {
foreach ($array as $key => $value) {
if ($key == "D") {
// Do something with this value
} else if (is_array($value)) {
$innerArray = $value;
} else {
break;
}
}
}