PHP поиск в массиве
Код:
main => Array(one => white, two => black, three => Array(g => green, r=> red))
А как можно быстро найти секцию g? Или только перебором всего массива можно найти данную секцию/элемент?
имхо только перебором
Цитата: DissDoc
А как можно быстро найти секцию g? Или только перебором всего массива можно найти данную секцию/элемент?
Что значит "найти секцию g"?
Можно попробовать сериализовать масив и искать в строке-результате сериализацыи.
а чем не подходит перебор в цикле?
Цитата: mfender
а чем не подходит перебор в цикле?
А зачем тут цикл? Тут нужен рекурсивный поиск.
Цитата: Nixus
А зачем тут цикл? Тут нужен рекурсивный поиск.
Есть принципиальная разница для достижения цели?
Код:
<?php
$main = Array(one => white, two => black, three => Array(g => green, r=> red));
echo search('one', $main);
echo search('g', $main);
echo search('ggg', $main); // return NULL
function search($key, $arr){
if (array_key_exists($key, $arr))
return $arr[$key];
else {
foreach ($arr as $val) {
if (gettype($val) == 'array'){
$res = search($key, $val);
if ($res != NULL)
return $res;
}
}
return NULL;
}
}
?>
$main = Array(one => white, two => black, three => Array(g => green, r=> red));
echo search('one', $main);
echo search('g', $main);
echo search('ggg', $main); // return NULL
function search($key, $arr){
if (array_key_exists($key, $arr))
return $arr[$key];
else {
foreach ($arr as $val) {
if (gettype($val) == 'array'){
$res = search($key, $val);
if ($res != NULL)
return $res;
}
}
return NULL;
}
}
?>
Ищет по уровнях вложености.
Цитата: mfender
Есть принципиальная разница для достижения цели?
Объясни как ты циклом собрался искать...
ЗЫ. Циклом сделать можно если прикрутить рукотворный стек и, возможно, механизм состояний, но зачем?
А как ты собираешься из рекурсии выйти по нахождении результата?
Из рекурсии выйти не проблема, Rebbit привел код. А вот как ты без рекурсии вложенные массивы обходить будешь?
Цитата: Nixus
Из рекурсии выйти не проблема, Rebbit привел код. А вот как ты без рекурсии вложенные массивы обходить будешь?
Я бы сделал как аз так, как предложил Rebbit. А ты, как я понял, упёрся в слово "цикл" и предлагал цикл самой функцией сделать... Может я не так понял...