2012-06-26 1 views
0

J'ai un tableau imbriqué avec des chiffres valides => données: -PHP - Trouvez valeur exacte ou la valeur au-dessus du tableau

$validData = array(array(1 => 'one data'),array(5 => '5 data'),array(15 => '15 data'),array(30 => 'thirty data')); 

Disons que j'ai une valeur de requête, $ query = 14;

Je veux d'abord vérifier s'il y a un 14, sinon alors aller à l'option la plus proche ci-dessus.

J'ai fait l'article le plus proche avec max, array_keys et ranges. Mais, correspondant ou allant au-dessus pour une raison quelconque, je ne peux pas voir la meilleure façon?

+0

Trier le tableau, en boucle le tableau se rappelant l'élément précédent, si vous êtes passé l'élément, utilisez l'élément précédent ... – deceze

+0

Ou, boucle via le tableau * en sens inverse * et s'arrête lorsque vous trouvez un élément avec 'key ($ item) <= $ query'. – Jon

Répondre

1
// in case your array keys are already sorted 
$prevKey = key(current($validData)); 
foreach($validData as $data) { 
    $currentKey = key($data); 
    if ($currentKey == $query) { 
     // found ! 
     echo $currentKey; 
     break; 
    } 
    else if ($currentKey > $query) { 
     echo $currentKey;  
     break; 
    } 
    $prevKey = $currentKey; 
} 
+1

Désolé n'a pas remarqué l'option la plus proche ci-dessus. Je viens de le réparer. – antoniom

1

En supposant que le tableau est trié

$query = 14; 
$arrayThatWeWant = null; 
foreach ($validData as $index=>$vdSubRay) 
{ 
    $ak = key($vsSubRay); 
    if ($ak == $query) 
    { 
     $arrayThatWeWant = $vdSubRay; 
     break; 
    } 
    else if ($ak > $query) 
    { 
     $arrayThatWeWant = $validData[$index-1]; 
     break; 
    } 
} 
Questions connexes