Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Поиск в многомерном массиве
Фибер Оптик  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 85
Пользователь №: 16771
На форуме: 7 лет, 10 месяцев, 6 дней
Карма:




Здравствуйте, уважаемые знатоки :)

У меня есть массив такого вида:


Array
(
[
14] => Array
(
[
page_id] => 14
[type] =>
[
menu_id] => 2
[page_name] => Каталог товаров
[parent_id] => 0
[alias] => catalog
[pic] =>
[
meta_title] =>
[
keywords] =>
[
description] =>
[
h1] =>
[
position] => 1
[text] =>
[
visible] => 1
[childs] => Array
(
[
6] => Array
(
[
page_id] => 6
[type] =>
[
menu_id] => 2
[page_name] => Категория 1
[parent_id] => 14
[alias] => cat1
[pic] => 1.jpg
[meta_title] =>
[
keywords] =>
[
description] =>
[
h1] =>
[
position] => 1
[text] =>
[
visible] => 1
[childs] => Array
(
[
19] => Array
(
[
page_id] => 19
[type] =>
[
menu_id] => 2
[page_name] => Категория 1.1
[parent_id] => 6
[alias] => cat1-1
[pic] =>
[
meta_title] =>
[
keywords] =>
[
description] =>
[
h1] =>
[
position] => 1
[text] =>
[
visible] => 1
)

[
20] => Array
(
[
page_id] => 20
[type] =>
[
menu_id] => 2
[page_name] => Категория 1.2
[parent_id] => 6
[alias] => cat1-2
[pic] =>
[
meta_title] =>
[
keywords] =>
[
description] =>
[
h1] =>
[
position] => 2
[text] =>
[
visible] => 1
)
)

)

[
7] => Array
(
[
page_id] => 7
[type] =>
[
menu_id] => 2
[page_name] => Категория 2
[parent_id] => 14
[alias] => cat2
[pic] => 3.jpg
[meta_title] =>
[
keywords] =>
[
description] =>
[
h1] =>
[
position] => 2
[text] =>
[
visible] => 1
[childs] => Array
(
[
25] => Array
(
[
page_id] => 25
[type] =>
[
menu_id] => 2
[page_name] => Категория 2.1
[parent_id] => 7
[alias] => cat2-1
[pic] =>
[
meta_title] =>
[
keywords] =>
[
description] =>
[
h1] =>
[
position] => 1
[text] =>
[
visible] => 1
)

)

)

)

)

[
18] => Array
(
[
page_id] => 18
[type] =>
[
menu_id] => 2
[page_name] => Контакты
[parent_id] => 0
[alias] => contacts
[pic] =>
[
meta_title] =>
[
keywords] =>
[
description] =>
[
h1] =>
[
position] => 5
[text] =>
[
visible] => 1
)

)



Так вот бьюсь уже долго с такой задачей:
у меня GETом поступает значение алиаса, например cat1. Мне надо пробежаться по массиву, найти это значение и у ключа, который содержит это значение, вывести [page_name].

Перечитал много всего, но так и не удалось реализовать.
Попробовал сделать сам через рекурсию:

function findToMass($arr, $search) {
$result = array();

foreach($arr as $k => $v) {
if ($v == $search) $result[] = $v;
if (is_array($arr[$k])) findToMass($v, $search);
}
return $result;
}

Таким способом получилось вывести только сам найденный параметр.

Подскажите, пожалуйста, какой-то способ.

Спасибо.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1357
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 12 дней
Карма: 77




$array = array(
1=> array(
'alias'=>1,
'name'=>'number1',
2=> array(
'alias'=>2,
'name'=>'number2',
),
),

2=> array(
'alias'=>3,
'name'=>'number13',
2=> array(
'alias'=>1,
'name'=>'number4',
2=> array(
'alias'=>5,
'name'=>'number5',
),
),
),
);


$result = array();
$return = findToMass($array, 'name', 'alias', 1);
echo '<pre>';
print_r($return);

function findToMass($array, $return_name, $search, $search_value) {
global $result;
foreach($array as $k=>$v) {


if (is_array($v))
findToMass($v, $return_name, $search, $search_value);
else {
if ($k == $search and $v == $search_value)
$result[] = $array[$return_name];
}

}

return $result;
}

исправил

Это сообщение отредактировал Kusss - 28.12.2015 - 16:00
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Фибер Оптик  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 85
Пользователь №: 16771
На форуме: 7 лет, 10 месяцев, 6 дней
Карма:




Спасибо большое, Kusss, за ответ.
А у тебя этот код работает? Просто мне сейчас пустой массив вернулся.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1357
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 12 дней
Карма: 77




Работает
Array
(
[
0] => number1
[1] => number4
)

http://sandbox.onlinephpfunctions.com/code...82599b516eb40b4

Это сообщение отредактировал Kusss - 28.12.2015 - 16:24
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1357
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 12 дней
Карма: 77




Фибер Оптик
Укажи какой ключ ты хочешь найти. у меня стоит 'name', а у тебя это 'page_name'
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Фибер Оптик  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 85
Пользователь №: 16771
На форуме: 7 лет, 10 месяцев, 6 дней
Карма:




точно, я пишу следующее:
$return = findToMass($array, 'page_name', 'alias', $_GET['alias']);


Вывод :
Array
(
)


Но 100% искомое значение есть
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1357
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 12 дней
Карма: 77




выводи промежуточный результат
				if ($k == $search and $v == $search_value)  {
$result[] = $array[$return_name];
echo '<br>='.$array[$return_name];
}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
bestxp  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



орангутанг
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2004
Пользователь №: 36605
На форуме: 3 года, 9 месяцев, 22 дня
Карма: 111




        if (is_array($arr[$k]))  findToMass($v, $search);


вопрос дойдя до вложенности он просто вызывает поиск) но ничего не возвращает =) следовательно у тебя [] вместо результатов


--------------------
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5497
Пользователь №: 35718
На форуме: 4 года, 21 день
Карма: 167




Цитата (Фибер Оптик @ 28.12.2015 - 14:20)
У меня есть массив такого вида:

подозреваю что из БД
покажите выборку, т.е. как вы получаете этот массив


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Фибер Оптик  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 85
Пользователь №: 16771
На форуме: 7 лет, 10 месяцев, 6 дней
Карма:




Цитата (Kusss @ 28.12.2015 - 12:33)
выводи промежуточный результат
    if ($k == $search and $v == $search_value)  {
    $result[] = $array[$return_name];
    echo '<br>='.$array[$return_name];
    }

промежуточный результат выводит то, что нужно.
Спасибо.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса