2016-07-27 7 views
1

Ok, ich werde erklären, was ich hier zu implementieren versuche. Es ist wie eine Nummernsuche. Ich werde eine Nummer übergeben und der Server gibt ein Array mit der ganzen Nummer zurück. Wenn die übergebene Nummer vorhanden ist, muss ich diese Nummer aus dem Array abrufen.php- ein Wert aus dem Array popping gibt falsches Ergebnis zurück

Es funktioniert, aber nicht in allen Szenarien.

<?php 

function fetchAll() 
{ 
    $data= array(); 
    $motherArray='["1","48","2","44","4"]'; 
    $data  = json_decode($motherArray); 
    return $data; 
} 

$allIDs=fetchAll(); 
if (!empty($allIDs)) 
{ 
    $checkThis=4; 
    if(in_array($checkThis,$allIDs)) 
    { 
     if (($key = array_search($checkThis, $allIDs)) !== false) 
     { 
      unset($allIDs[$key]); 
     }  
     if(!empty($allIDs)) 
     {  
      $allIDsJSON   = json_encode($allIDs); 
      echo $allIDsJSON; 
     } 
     else 
     { 
      echo 'empty'; 
     }   
    } 
    else 
    { 
     echo 'not present'; 
    } 
} 

?> 

Oben ist mein Code angegeben. Ich versuche, nach der Nummer 4 zu suchen.

Nummer 4 kann in jeder Position sein. Es kann in der ersten, mittleren oder letzten sein. Mein Code funktioniert, wenn die Nummer in der letzten Position ist. Dann gibt es die korrekte Ausgabe zurück.

Fall 1:

$motherArray='["1","48","2","44","4"]'; 

, wenn es in der letzten Position ist, erhalte ich die richtige Ausgabe:

["1","48","2","44"] 

Fall 2:

Wenn Nummer 4 in ist jede andere Position

$ motherArray = '["1", "48", "2", "4", "44"]';

dann die Ausgabe ich erhalte, ist:

{"0":"1","1":"48","2":"2","4":"44"} 

Ich weiß nicht, warum es so passiert. Kann mir jemand helfen, herauszufinden, was mit diesem Code nicht stimmt?

+2

* mit der Wenn-Nummer 4 in einer anderen Position ist * - Array hat keine sequentiellen Indizes und dekodiert Funktion ein Objekt erstellen.Verwenden Sie '$ allIDsJSON = json_encode (array_values ​​($ allIDs));' – splash58

+0

das obige ist die richtige Antwort –

Antwort

0

Sie ist Code wird nicht funktionieren, wenn mehrere Werte Ihrer Nummer lautet:

foreach (array_keys($allIDs, $checkThis) as $key) unset($allIDs[$key]);

0

Die richtige Antwort in den Kommentaren versehen already.I wird es nur hier mit einer Erklärung hinzu.

Wenn die Nummer nicht in der letzten Position ist, dann erstellen Sie ein Array, das nicht sequenziell ist, wenn Sie unset($allIDs[$key]);.

Original-Array: Array ([0] => 1 [1] => 48 [2] => 2 [3] => 4 [4] => 44)

Array nach drittes Element unsetting: Array ([0] => 1 [1] => 48 [2] => 2 [4] => 44)

Da in JavaScript gibt es nicht assoziative Arrays, wenn Sie json_encode($allIDs); die gültige JSON verwenden führen Sie bekommen, ist ein JSON-Objekt kein Array.

Also, wenn Sie ein Array wollen, müssen Sie das Array neu indizieren sich wie folgt aus:

$indexed_array = array(); 

foreach ($allIDs as $row) { 
    $indexed_array[] = $row; 
} 

json_encode($indexed_array); 

Oder durch array_values Funktion

echo json_encode(array_values($allIDs)) 
+0

Ich habe die Antwort in Kommentaren verwendet und es hat funktioniert. Er hat es nicht als eine Antwort hinzugefügt, co konnte ich nicht akzeptieren, stattdessen hat eine Stimme gegeben –

Verwandte Themen