2017-06-28 1 views
1

Ich habe eine Zeichenfolge, die wie folgt aussieht:Warum gibt meine foreach-Schleife das gesamte Array zurück, wo es die einzelnen Werte speichern soll?

JMOZ001-JMGMDM-2017-MAR-13-,JMOZ001-JMKJ-2017-MAR-15-,JMOZ001-JMGMKJ-2017-MAR-16- 

verwende ich explodieren ein Array von jeder Komponente durch ein Komma getrennt erstellen mit:

print_r($skusearchesarray[] = explode(",", $skusearches)); 

Der Ausgang für die oben genau wie Sie erwarten würden:

Array ([0] => JMOZ001-JMGMDM-2017-MAR-13- [1] => JMOZ001-JMKJ-2017-MAR-15- [2] => JMOZ001-JMGMKJ-2017-MAR-16-) 

nun in der Anordnung durch jedes Element Schleife und Dinge tun, für jeden mit diesem Code ich versuche:

Ich erwarte, dass oben die Zeichenfolge für jedes Element in dem Array gedruckt wird, aber stattdessen druckt es das gesamte Array aus, zu dem es gehört. Dies ist die Ausgabe für diesen Ausdruck:

Array ([0] => JMOZ001-JMGMDM-2017-MAR-13- [1] => JMOZ001-JMKJ-2017-MAR-15- [2] => JMOZ001-JMGMKJ-2017-MAR-16-) 

Das gleiche wie das Drucken des Arrays selbst. Was gibt?

+0

Print_r ist ein Debugging-Tool. Verwenden Sie einfach echo $ skusearchterm; – gview

Antwort

3

Sie ordnen die Explosion als zweite Dimension Ihres Arrays zu. Änderung:

print_r($skusearchesarray[] = explode(",", $skusearches)); 

zu:

print_r($skusearchesarray = explode(",", $skusearches)); 
+0

Danke, das hat es behoben. –

0

Verwenden statt priint_r echo(), print_r() wird das gesamte Array für Sie drucken, sofern Sie ein Array an es übergeben.

1

Sicherlich war Ihre Aufgabe falsch, aber das ist nicht der einzige Grund, warum Sie ein verwirrendes Ergebnis erhalten.

Wie ich bereits erwähnt habe, ist print_r zum größten Teil ein Debugging-Tool. Ihr Code sollte nur jeden Wert in der foreach-Schleife zurückgeben.

das gesagt ist, diese Linie ist problematisch:

print_r($skusearchesarray[] = explode(",", $skusearches)); 

Wie in Patrick Antwort darauf hingewiesen, sollten Sie nicht das Ergebnis einer Array-Variablen werden zuweisen, sondern nur eine Variable, das wird ein Array werden auf Zuordnung.

Warum haben Sie das nicht in Ihrem Debugging gesehen? Weil Sie php print_r darum gebeten haben, print_r die eigentliche ZUWEISUNG, dh. print_r ($ var = explode()) anstatt der produzierten Variable. In diesem Fall passiert es, dass das Ergebnis der Explosion, das Array, das Sie erwarten, zurückgegeben wird, und Sie denken, dass die neue Array-Variable das ist, was Sie erwartet haben, wenn das Ergebnis tatsächlich in einem Array-Element, das später nicht mit Ihrer Annahme über Ihre foreach-Schleife funktioniert.

Hoffentlich wird dieser Code hilft Ihnen dies deutlich zu verstehen, und zeigen, wie Sie in erster Linie verwirrt habe:

<?php 

$skusearches = 'JMOZ001-JMGMDM-2017-MAR-13-,JMOZ001-JMKJ-2017-MAR-15-,JMOZ001-JMGMKJ-2017-MAR-16-'; 
print_r($skusearchesarray[] = explode(",", $skusearches)); 

print_r($skusearchesarray); 

$skusearchesarray = explode(",", $skusearches); 

print_r($skusearchesarray); 

Die Ergebnisse sind:

Array 
(
    [0] => JMOZ001-JMGMDM-2017-MAR-13- 
    [1] => JMOZ001-JMKJ-2017-MAR-15- 
    [2] => JMOZ001-JMGMKJ-2017-MAR-16- 
) 
Array 
(
    [0] => Array 
     (
      [0] => JMOZ001-JMGMDM-2017-MAR-13- 
      [1] => JMOZ001-JMKJ-2017-MAR-15- 
      [2] => JMOZ001-JMGMKJ-2017-MAR-16- 
     ) 

) 
Array 
(
    [0] => JMOZ001-JMGMDM-2017-MAR-13- 
    [1] => JMOZ001-JMKJ-2017-MAR-15- 
    [2] => JMOZ001-JMGMKJ-2017-MAR-16- 
) 

Run the code here.

Verwandte Themen