Как искать массив для нескольких значений в 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]);
Ответы
Ответ 1
Вы хотите 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]
}
}
}
Ответ 2
В array_search()
мы можем прочитать:
Если игла найдена в стоге сена больше чем один раз, первая соответствующая клавиша вернулся. Чтобы вернуть ключи для всех совпадающие значения, используйте array_keys()
с необязательный параметр search_value
вместо этого.
Ответ 3
Следующая комбинация вызовов функций даст вам все повторяющиеся значения:
$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
Ответ 4
В руководстве по PHP указано Return Value
документации по функциям array_search()
, которую вы можете использовать array_keys()
, чтобы выполнить это. Вам просто нужно предоставить второй параметр:
$keys = array_keys($list[0], "2009-09-09");
Ответ 5
Вы можете добиться этого, используя array_search()
с помощью цикла while
и следующего обходного пути:
while (($key = array_search("2009-09-09", $list[0])) !== FALSE) {
print($key);
unset($list[0][$key]);
}
Источник: ссылка в openxbox на php.net
Для одномерного многомерного массива вы можете использовать следующую функцию для этого (в качестве альтернативы 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