Как искать в массиве несколько значений в PHP?
-
06-07-2019 - |
Вопрос
Мне нужно получить ключи от дубликатов значений. Я пытался использовать 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]);
Решение
Вы хотите 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
Этого можно добиться с помощью 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 р>
В руководстве по PHP указано < code> Возвращаемое значение раздела array_search ()
документации по функциям , которую вы можете использовать array_keys ()
для этого. Вам просто нужно предоставить второй параметр:
$keys = array_keys($list[0], "2009-09-09");