2012-03-27 15 views
2

There is almost identical question, aber ich habe keine Ahnung, was ich in meinem Fall tun soll.Foreach gibt nur den ersten Buchstaben eines Array-Elements zurück?

Ich bin nur mit OO PHP beginnen, und ich habe diese Funktion in meiner Klasse:

public function show() { 
    foreach($this->data['fields'] as $field) { 
     $type = $field['type']; 
     echo $type; 
    } 
} 

Hier ist die Eingangsdaten:

my_function('id', 
    array(
    'foo' => 'bar', 
    'bar' => 'foo', 
    'fields' => array(
     'type' => 'my_type', 
     'foo' => 'bar', 
     'etc.' => 'value'), 
    ), 
); 

Natürlich echo $field['type'] kehrt nur der erste Buchstabe von my_type (m).

Und ich kann nicht einfach nur echo $field benutzen, wie ich mehrere Schlüssel unter diesem Array und es gibt my_typebarvalue statt my_type, geschieht das gleiche mit $field[0] (mbv). Was soll ich machen?

Antwort

2

Es gibt drei Schlüssel-Wert-Paare in $this->data['fields']: type => my_type, foo => bar und etc. => value. Wenn Sie diese foreach-Syntax verwenden, enthält $fieldnur den Wert des Paares, das immer eine Zeichenfolge ist.

Der Indexoperator (die Klammern nach der Variablen, wie in $foo['bar']) arbeitet auch an Zeichenfolgen und gibt das Zeichen am angegebenen Index zurück. Beim Typ-Jonglieren wird die Zeichenfolge 'type' in die Ganzzahl 0 umgewandelt, und Sie erhalten als erstes das erste Zeichen der Zeichenfolge.

Ich bin mir nicht sicher, was Sie eigentlich wollen, wenn echo $field nicht in Ordnung ist. PHP wird keine Zeilenumbrüche oder Trennzeichen drucken, wenn Sie nicht gefragt werden, also sollten Sie versuchen, echo $field . ' ' und sehen, dass die Werte tatsächlich unterschiedlich sind.

+0

Ich habe 'Echo $ Feld' und alles war danach klar! Brilliante Antwort, vielen Dank, so sollte SO aussehen (Dinge erklären anstatt direkte Antworten/Code zu geben). Vielen Dank! :) – Wordpressor

1

foreach wird iterieren über alle Elemente in $data['fields']. Bei der ersten Iteration wird $field"my_type" sein, in der zweiten Iteration $field wird "bar" und so weiter sein. Das heißt, bei jeder Iteration wird $field eine Zeichenkette sein, kein Array.

Sie ein Array von Arrays für diese Schleife müssen Sinn machen, wie:

'fields' => array(
    array(
     'type' => 'my_type', 
     'foo' => 'bar', 
     'etc.' => 'value', 
    ), 
    ... 
) 
+0

'... 'Wert'),' sollte ''Wert',', oder? – bfavaretto

+0

Wahr. Kopieren Sie einfach den OP-Code und fügen Sie ihn ein. :) – deceze

2

Wenn Sie über Felder durchlaufen, welche ist die folgende:

array(
    'type' => 'my_type', 
    'foo' => 'bar', 
    'etc.' => 'value' 
) 

mit

foreach($this->data['fields'] as $field) 

Bei jeder Iteration sind $field bereits die Werte, nach denen Sie suchen (my_type, bar, value), also macht $ field ['type'], wie @zneak erwähnt, php, um 'type' mit 0 zu jonglieren, daher erhältst du das erste Zeichen.

Wert zu erhalten, wenn Sie bei Typ Schlüssel sind, können Sie wie folgt vorgehen:

public function show() { 
    foreach($this->data['fields'] as $key => $field) { 
     if($key == 'type') echo $field; 
    } 
} 
0

Ihr Array ‚Felder‘ ist wie:

$fields['type'] = 'my_type'; 
    $fields['foo'] = 'bar'; 
    $fields['etc'] = 'value'; 

bedeutet, dass Ihr Array hat nur eine Abmessungen. So greifen Sie darauf wie oben zu.
In der foreach sagen Sie php durch die Schlüssel (Typ, foo, ect) gehen. Also $ Feld ist schon (my_type, bar, value)!

// You either need to write: 
foreach($this->data as $field) { 
    $type = $field['fields']['type']; 
    echo $type; 
} 

// Or 
foreach($this->data['fields'] as $field) { 
if ($field == 'type') { 
     $type = $field; 
     echo $type; 
} 
} 

// Or 
foreach($this->data['fields'] as $key => $val) { 
if ($key == 'type') { 
     $type = $val; 
     echo $type; 
} 
} 
Verwandte Themen