Как искать массив для нескольких значений в PHP?

Мне нужно получить ключи от значений, которые являются дубликатами. Я попытался использовать array_search, и это сработало нормально, но я получил только первое значение в качестве хита.

Мне нужно получить оба ключа из повторяющихся значений, в этом случае 0 и 2. Результат результата поиска в виде массива будет хорошим.

Есть ли функция PHP для этого или мне нужно написать несколько циклов для этого?

$list[0][0] = "2009-09-09"; $list[0][1] = "2009-05-05"; $list[0][2] = "2009-09-09"; $list[1][0] = "first-paid"; $list[1][1] = "1"; $list[1][2] = "last-unpaid"; echo array_search("2009-09-09",$list[0]); 

Solutions Collecting From Web of "Как искать массив для нескольких значений в PHP?"

Вы хотите, чтобы 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] } } } 

В array_search() мы можем читать:

Если игла найдена в стоге сена более одного раза, возвращается первая совпадающая клавиша. Чтобы вернуть ключи для всех совпадающих значений, используйте параметр array_keys() с необязательным параметром search_value .

Следующая комбинация вызовов функций даст вам все повторяющиеся значения:

 $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 указано в разделе « Return Value » документации по array_search() которой вы можете использовать array_keys() для этого. Вам просто нужно предоставить второй параметр:

 $keys = array_keys($list[0], "2009-09-09"); 

Вы можете достичь этого, используя array_search() , используя цикл while и следующее обходное решение:

 while (($key = array_search("2009-09-09", $list[0])) !== FALSE) { print($key); unset($list[0][$key]); } с while (($key = array_search("2009-09-09", $list[0])) !== FALSE) { print($key); unset($list[0][$key]); } 

Источник: реплика в openxbox на php.net

Для array_keys() многомерного массива вы можете использовать следующую функцию для достижения этого (в качестве альтернативы array_keys() ):

 function array_isearch($str, $array){ $found = array(); foreach ($array as $k => $v) { if (strtolower($v) == strtolower($str)) { $found[] = $k; } } return $found; } 

Источник: robertark, php.net