В режиме выпуска издержки минимальны.
, Если Вы не собираетесь быть исключениями использования для управления потоком (пример, нелокальные выходы) рекурсивным способом, я сомневаюсь, что Вы будете в состоянии заметить различие.
Вы хотите array_keys со значением поиска
array_keys($list[0], "2009-09-09");
, которое вернет массив ключей с указанным значением, в вашем случае [0, 2]. Если вы также хотите найти дубликаты, вы можете сначала выполнить проход с помощью array_unique , а затем перебрать этот массив, используя array_keys в оригинале; все, что возвращает массив длиной> 1, является дубликатом, а результатом являются ключи, в которых хранятся дубликаты. Что-то вроде ...
$uniqueKeys = array_unique($list[0])
foreach ($uniqueKeys as $uniqueKey)
{
$v = array_keys($list[0], $uniqueKey);
if (count($v) > 1)
{
foreach ($v as $key)
{
// Work with $list[0][$key]
}
}
}
Следующая комбинация вызовов функций даст вам все повторяющиеся значения:
$a = array(1, 1, 2, 3, 4, 5, 99, 2, 5, 2);
$unique = array_unique($a); // preserves keys
$diffkeys = array_diff_key($a, $unique);
$duplicates = array_unique($diffkeys);
echo 'Duplicates: ' . join(' ', $duplicates) . "\n"; // 1 2 5
В руководстве по PHP в разделе Возвращаемое значение
документации по функции array_search ()
указано, что вы можете использовать array_keys ( )
для достижения этой цели. Вам просто нужно указать второй параметр:
$keys = array_keys($list[0], "2009-09-09");
В array_search ()
мы можем прочитать:
Если иголка найдена в стоге сена, подробнее чем один раз, первый соответствующий ключ вернулся. Вернуть ключи для всех соответствующие значения, используйте
array_keys ()
с необязательный параметрsearch_value
вместо этого.