Domanda

Devo ottenere le chiavi da valori duplicati. Ho provato a usare array_search e ha funzionato bene, MA ho avuto solo il primo valore come successo.

Devo ottenere entrambe le chiavi dai valori duplicati, in questo caso 0 e 2. L'output del risultato della ricerca come array sarebbe buono.

Esiste una funzione PHP per fare questo o devo scrivere alcuni loop multipli per farlo?

$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]);
È stato utile?

Soluzione

Desideri array_keys con il valore di ricerca

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

che restituirà un array di chiavi con il valore specificato, nel tuo caso [0, 2]. Se vuoi trovare anche i duplicati, puoi prima fare un passaggio con array_unique , quindi scorrere su quell'array usando array_keys sull'originale; tutto ciò che restituisce una matrice di lunghezza > 1 è un duplicato e il risultato sono le chiavi in ??cui sono archiviati i duplicati. Qualcosa come ...

$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]
    }

  }
}

Altri suggerimenti

In array_search () noi può leggere:

  

Se l'ago si trova di più nel pagliaio   di una volta, la prima chiave corrispondente è   restituito. Per restituire le chiavi per tutti   valori corrispondenti, utilizza array_keys () con   il parametro facoltativo search_value   invece.

La seguente combinazione di chiamate di funzione ti darà tutti i valori duplicati:

$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

Puoi farlo utilizzando array_search () utilizzando mentre loop e la seguente soluzione alternativa:

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

Fonte: cue su openxbox su php.net

Per un array monodimensionale, è possibile utilizzare la seguente funzione per ottenere ciò (in alternativa a 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

Il manuale di PHP afferma nel < code> Valore restituito della array_search () documentazione della funzione che puoi usare array_keys () per farlo. Devi solo fornire il secondo parametro:

$keys = array_keys($list[0], "2009-09-09");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top