2016-09-21 2 views
-1

Wie erhält man den nächsten Wert eines Wertes aus dem Array? Ich habe ein Array wie diesePHP-Array nächster Wert eines Werts

$items = array(
    '1' => 'two', 
    '9' => 'four', 
    '7' => 'three', 
    '6'=>'seven', 
    '11'=>'nine', 
    '2'=>'five'   
); 

wie nächsten Wert von ‚vier‘ oder ‚neun‘ zu bekommen.

Antwort

0

Wenn das der Fall ist, sollten Sie zuerst Ihr Array vorbereiten. Basierend auf dem angegebenen Array scheint der Index nicht fortlaufend korrekt zu sein. Versuchen Sie es mit der Funktion array_values ​​().

$items = array(
    '1' => 'two', 
    '9' => 'four', 
    '7' => 'three', 
    '6'=>'seven', 
    '11'=>'nine', 
    '2'=>'five'   
); 

$new_items = array_values($items); 

$new_items = array(
    [0] => 'two', 
    [1] => 'four', 
    [2] => 'three', 
    [3] => 'seven', 
    [4] => 'nine', 
    [5] =>'five'   
); 

Dann können Sie die foreach tun ..

foreach($new_items as $key => $value) { 
    // Do the code here using the $key 
} 
+1

Sie können foreach tun, ohne array_values ​​zuerst zu verwenden. Was löst das auf? –

2

Ich habe this

$input = "nine"; 

$items = array(
    '1' => 'two', 
    '9' => 'four', 
    '7' => 'three', 
    '6'=>'seven', 
    '11'=>'nine', 
    '2'=>'five' 
); 

$keys = array_keys($items); 
$size = count($keys); 

$foundKey = array_search($input,$items); 

if($foundKey !== false) 
{ 
    $nextKey = array_search($foundKey,$keys)+1; 
     echo "your input is: ".$input."\n"; 
     echo "it's key is: ".$foundKey."\n"; 
    if($nextKey < $size) 
    { 
     echo "the next key => value is: ".$keys[$nextKey]." => ".$items[$keys[$nextKey]]."\n"; 
    } 
    else 
    { 
     echo "there are no more keys after ".$foundKey; 
    } 
} 

die Idee, dass liegt daran, dass die Schlüssel nicht in jeder realen Ordnung i ein vornehmen müssen einfach zu durchqueren, indem Sie alle Schlüssel erhalten und sie in ein Array setzen, so dass ihre ganzzahligen Schlüssel unsere Reihenfolge sind. so '1' = 0, '9' = 1, '11' = 4.

von dort ich finde dann, welcher Schlüssel unserer Eingabe entspricht. Wenn ich es finde, bekomme ich die Position dieser Taste und + 1 (die nächste Taste). Von dort kann ich die Daten in $items mit dem String-Wert in $keys an der Position unserer Eingabe +1 verweisen.

Wenn unsere Eingabe 'five' ist, tritt ein Problem auf, da 'five' der letzte Wert in unserem Array ist. also überprüft die letzte if-Anweisung, ob der Index für den nächsten Schlüssel kleiner ist als die Anzahl der Schlüssel, da der größte verfügbare Index 5 ist und die Anzahl der Schlüssel 6 ist.

während Sie array_values verwenden könnten Holen Sie alle Werte in ein Array mit geordneten Integer-Schlüsseln, dadurch verlieren Sie Ihre ursprünglichen Schlüssel, außer Sie haben auch array_keys verwendet. wenn Sie array_keys verwenden zuerst, dann gibt es wirklich keine Notwendigkeit array_values

1

Hoffnung diese Hilfe zu nutzen:

while (($next = next($items)) !== NULL) { 
    if ($next == 'three') {  
     break;  
    } 
} 
$next = next($items); 
echo $next; 

für großen Array u verwenden kann:

$src = array_search('five',$items); // get array key 
$src2 = array_search($src,array_keys($items)); // get index array (start from 0) 
$key = array_keys($items); // get array by number, not associative anymore 


// then what u need just insert index array+1 on array by number ($key[$src2+1]) 

echo $items[$key[$src2+1]]; 
+0

Danke für Ihre Antwort Es wird mein Problem lösen. –

+0

lol. aber ich bin froh, dass es jemandem hilft, aber ich denke, dass Sie meine Antwort vervollständigen müssen, wenn Sie das letzte Array durchsuchen oder nicht im Array suchen. –

+0

Dies wird zu Problemen mit sehr großen Arrays mit sagen .... 1000 Werte in ihnen laufen. Wenn der Wert der 985ste Wert wäre, müssten Sie 985 Iterationen der Schleife warten, bevor Sie eine Antwort erhalten. –

Verwandte Themen