Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Доступ к определенным ключам ассоциативного массива

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
BlackHacker
Отправлено: 12 Июня, 2013 - 07:17:47
Post Id


Новичок


Покинул форум
Сообщений всего: 38
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Всем привет. Есть ассоциативный массив, например, вида
PHP:
скопировать код в буфер обмена
  1. $a = array();
  2. $a['i']['b']['c']='d';
  3. $a['i']['s']='q';
  4. $a['i']['g']='d';
  5. $a['l']['k']['c']='d';
  6. $a['l']['h']='q';
  7. $a['l']['l']='d';
  8. $a['m']['k']['c']='d';
  9. $a['m']['h']='q';
  10. $a['m']['l']='d';


Как можно получить ключи, например, со значением ['b'] (должен вернуть ключ ['i'])? Пробовал через array_keys указывать значение, но сразу подозревал, что так не получится)

(Отредактировано автором: 12 Июня, 2013 - 07:18:34)

 
 Top
Саныч Модератор
Отправлено: 12 Июня, 2013 - 09:09:37
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




PHP:
скопировать код в буфер обмена
  1. function getKeys(&$array, $search) {
  2.         $result = [];
  3.         foreach ($array as $k => $v)
  4.                 if (is_array($v) && array_key_exists($search, $v))
  5.                         $result[] = $k;
  6.         return $result;
  7. }
  8.  
  9. var_dump(getKeys($a, 'b')); // array(1) {[0]=>string(1) "i"}


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
BlackHacker
Отправлено: 12 Июня, 2013 - 10:52:31
Post Id


Новичок


Покинул форум
Сообщений всего: 38
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Саныч пишет:
PHP:
скопировать код в буфер обмена
  1. function getKeys(&$array, $search) {
  2.         $result = [];
  3.         foreach ($array as $k => $v)
  4.                 if (is_array($v) && array_key_exists($search, $v))
  5.                         $result[] = $k;
  6.         return $result;
  7. }
  8.  
  9. var_dump(getKeys($a, 'b')); // array(1) {[0]=>string(1) "i"}


Спасибо, так и сделал пока, но изначально в вопросе не написал, что хотел именно через array_keys, или подобные стандартные функции php, т.к. массив очень большой, а foreach работает в разы дольше, перебирая каждый элемент
 
 Top
Саныч Модератор
Отправлено: 12 Июня, 2013 - 14:09:21
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




Через стандартные врядли получится. Разве что каким-то хитрым сочетанием функий... Ну сходу так я не могу придумать.
Что значит "очень большой"? За сколько отрабатывает функция на вашем очень большом массиве?


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
BlackHacker
Отправлено: 14 Июня, 2013 - 17:58:16
Post Id


Новичок


Покинул форум
Сообщений всего: 38
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Саныч пишет:
Через стандартные врядли получится. Разве что каким-то хитрым сочетанием функий... Ну сходу так я не могу придумать.
Что значит "очень большой"? За сколько отрабатывает функция на вашем очень большом массиве?


Извиняюсь, возможно, немного преувеличил) Массив правда очень большой, но индексов мало, в основном все элементы вложенные. Поэтому обрабатывается относительно быстро - 0.02 секунды)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB