Помогите решить задачу.
Требуется, чтобы в функцию на вход подавался массив произвольной вложенности в качестве первого параметра, и некое значение (то есть, не массив) - в качестве второго (или наоборот), а возвращать функция должна цепочку индексов искомого элемента в поданном массиве - в произвольной форме (то есть, будет ли это строка индексов через запятую, или массив индексов - не важно).
То есть, если первым параметром подан массив, например,
$ar=array(0,1,2,array('d',31,32,33,array(340,341,'d'),'d'),4,5,array(60,61,62),'qwerty'=>'d');
а вторым - значение 341, то результатом должно быть что-то наподобие
3,4,1
Многократные вхождения искать не надо - то есть, если, для указанного примера, будет подано значение 'd', то достаточно будет его найти и выдать цепочку индексов один раз.
А вот глубина вложений должна поддерживаться произвольная - то есть, если подам массив двенадцатиуровневой вложенности - то могла бы вернуть цепочку с двенадцатью индексами, если искомое значение окажется в самой глубине.
1. Илья12 - 18 Сентября, 2011 - 22:35:40 - перейти к сообщению
2. grefon - 19 Сентября, 2011 - 07:35:06 - перейти к сообщению
Стандартной функции поиска в многомерном массиве нет. Вот что получилось у меня, думаю принцип будет ясен:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- $val = 341;
- $str = '';
- function arrayIndex($array, $x) {
- global $str;
- foreach ($array as $key=>$val) {
- $str .= ','.$key;
- return true;
- } elseif ($val === $x) {
- $str .= ','.$key;
- return true;
- }
- }
- return false;
- }
- arrayIndex($array, $val);
- echo $str;