Como pesquisar Array para vários valores em PHP?
-
06-07-2019 - |
Pergunta
Eu preciso para obter as chaves de valores que são duplicatas. Eu tentei usar array_search e que funcionou bem, mas eu só tenho o primeiro valor como um hit.
Eu preciso para obter ambas as teclas dos valores duplicados, neste caso 0 e 2. A saída resultado da pesquisa como uma matriz seria bom.
Existe uma função PHP para fazer isso ou eu preciso escrever alguns vários loops para fazê-lo?
$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]);
Solução
Você quer array_keys com o valor de pesquisa
array_keys($list[0], "2009-09-09");
que irá retornar uma matriz das chaves com o valor especificado, no seu caso [0, 2]. Se você quiser encontrar os duplicados, bem como, você pode primeiro fazer um passe com array_unique , em seguida, iterar essa matriz usando array_keys no original; qualquer coisa que retorna uma matriz de comprimento> 1 é uma duplicata, eo resultado é as chaves em que as duplicatas são armazenados. Algo como ...
$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]
}
}
}
Outras dicas
Na array_search()
podemos ler:
Se a agulha é encontrada em mais palheiro de uma vez, a primeira chave de correspondência é retornou. Para retornar as chaves para todos Os valores correspondentes, de uso
array_keys()
com o parâmetrosearch_value
opcional em seu lugar.
A seguinte combinação de chamadas de função lhe dará todos os valores duplicados:
$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
Você pode conseguir isso usando array_search()
usando circuito while
e a seguinte solução alternativa:
while (($key = array_search("2009-09-09", $list[0])) !== FALSE) {
print($key);
unset($list[0][$key]);
}
Fonte: sugestão em openxbox em php.net
Para matriz de uma multidimensional, você pode usar a seguinte função para conseguir isso (como alternativa para array_keys()
):
function array_isearch($str, $array){
$found = array();
foreach ($array as $k => $v) {
if (strtolower($v) == strtolower($str)) {
$found[] = $k;
}
}
return $found;
}
Fonte: robertark, php.net
Os PHP estados manuais na Return Value
seção da documentação função array_search()
que você pode usar array_keys()
para alcançar este objetivo. Você só precisa fornecer o segundo parâmetro:
$keys = array_keys($list[0], "2009-09-09");