2012-03-31 4 views
0

I eine json encode in PHP wie folgt zu erstellen:Looping eine json encode nach Typ gefiltert

$get = mysql_query("SELECT * FROM $table") or die(mysql_error()); 
$data = array(); 
     while($row = mysql_fetch_assoc($get)){ 
      $data[$row['id']][0] = $row['g']; 
      $data[$row['id']][1] = $row['w']; 
      $data[$row['id']][2] = $row['s']; 
      $data[$row['id']][3] = $row['name']; 
      $data[$row['id']][4] = $row['type']; 
      } 
$data4 = json_encode($data);   

I Zuweisen zu einer Variable js: var BDATA;

Also was ich versuche zu tun ist jetzt Schleife den Inhalt gefiltert durch [4] = Typ.

Dies ist meine Schleife:

for(var key in bdata){ 
//stuff here 
} 

Aber dieser Schleife wird alle von ihnen ... aber ich will nur diejenigen Schleife, die eine [4] (Typ) einen bestimmten Wert haben können, den Wert sagen war "2".

Gibt es eine Möglichkeit, das zu tun?

+0

was meinst du mit 'Aber das wird sie alle"? –

+0

Es durchläuft alle Schlüssel in bdata. Eher als nur diejenigen, bei denen ['id'] [4] = ein bestimmter Wert ist. – Sir

+0

Dies ist, weil Sie es auf diese Weise looping sind. Fügen Sie einfach eine "if" -Option in die Schleife ein. –

Antwort

1

Sie durchlaufen Ihre Zeilen. Nicht deine Spalten. Für jede Zeile gibt es eine bestimmte Spalte namens type. Wenn Sie es verarbeiten möchten, können Sie es holen. So wie du den JSON konstruierst, wird es auf der JS Seite bald genug unlesbar sein, dass du dir die Haare ziehen wirst.

So ist es besser, Tasten benannt zu haben.

Sie sollten es auf diese Weise getan haben,

$get = mysql_query("SELECT id, g, w, s, name, type FROM $table") 
    or die(mysql_error()); 
// If you only need to fetch the type then just list `type` on the above list. 
$data = array(); 
     while($row = mysql_fetch_assoc($get)){ 
      $data[] = $row; 
      // or 
      // $data[$row['id']] = $row; 
     } 
$data4 = json_encode($data); 

Am JS Ende.

for(var key in bdata){ 
    var type = bdata[key].type; 
    // process type 
} 
+0

Schleifen nicht immer alle Zeilen? Und nicht nur die mit bestimmten Typen? Die weniger Schleife wird die beste Option sein, um Ineffizienz zu reduzieren? – Sir

+0

Über welche Schleife sprichst du? PHP oder JS? –

+0

Javascript .. :) – Sir

2

Sie sollten das Array in PHP und übergeben das gefilterte Array in eine JS-Variable Filter:

function filter($item) { 
    return $item[4] == $whateverYouWant; 
} 
$data4 = json_encode(array_filter($data, "filter")); 
0

Wenn das gesamte Array in einer einzigen Variablen in JS gespeichert sind, werden Sie eine Schleife durch alle Schlüssel -Werte Paare, ob sie die gewünschte ID haben oder nicht.

Sie müssten jeden KVP nach der ID suchen, die Sie suchen. So etwas wie dieses

foreach(var key in bdata) 
{ 
    if (key.id === 4) 
    { 
    //do your stuff here 
    } 
} 

auf diese Weise Looping ist sehr billig, so hat es keinen Sinn zu viel Zeit in verbringen, dies zu optimieren, indem einige Elemente zusammen zu überspringen.

+0

Ist das effizienter als der Vorschlag unten? – Sir

+0

Sind Sie sicher, dass dies funktioniert? 'key' sollte' $ row ['id'] 'sein. Siehe OP-Code. –

+0

@Dave: die andere Antwort macht die Filterung auf der Serverseite, mein Beispiel tut es auf der Client-Seite. Beide werden gleich effizient sein +/- ein paar Nanosekunden – xbonez