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]);
Foi útil?

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âmetro search_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");
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top