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
Форумы портала PHP.SU :: Версия для печати :: Доступ к определенным ключам ассоциативного массива
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Доступ к определенным ключам ассоциативного массива

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

1. BlackHacker - 12 Июня, 2013 - 07:17:47 - перейти к сообщению
Всем привет. Есть ассоциативный массив, например, вида
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 указывать значение, но сразу подозревал, что так не получится)
2. Саныч - 12 Июня, 2013 - 09:09:37 - перейти к сообщению
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"}
3. BlackHacker - 12 Июня, 2013 - 10:52:31 - перейти к сообщению
Саныч пишет:
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 работает в разы дольше, перебирая каждый элемент
4. Саныч - 12 Июня, 2013 - 14:09:21 - перейти к сообщению
Через стандартные врядли получится. Разве что каким-то хитрым сочетанием функий... Ну сходу так я не могу придумать.
Что значит "очень большой"? За сколько отрабатывает функция на вашем очень большом массиве?
5. BlackHacker - 14 Июня, 2013 - 17:58:16 - перейти к сообщению
Саныч пишет:
Через стандартные врядли получится. Разве что каким-то хитрым сочетанием функий... Ну сходу так я не могу придумать.
Что значит "очень большой"? За сколько отрабатывает функция на вашем очень большом массиве?


Извиняюсь, возможно, немного преувеличил) Массив правда очень большой, но индексов мало, в основном все элементы вложенные. Поэтому обрабатывается относительно быстро - 0.02 секунды)

 

Powered by ExBB FM 1.0 RC1