2012-03-27 163 views
2

There is almost identical question,但我不知道該怎麼辦我的情況。Foreach只返回一個數組元素的第一個字母?

我只是用OO PHP開始,我有我的類中此功能:

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

這裏的輸入數據:

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

echo $field['type']只返回的my_type第一個字母(m)。

我不能只是簡單地使用echo $field因爲我有這個數組下多個鍵和返回my_typebarvalue代替my_type,同樣的情況與$field[0]mbv)。我該怎麼辦?

回答

2

$this->data['fields']type => my_typefoo => baretc. => value有三個鍵值對。當您使用此foreach語法時,$field將僅包含該對的值,它始終是一個字符串。

索引運算符(變量後面的括號,如$foo['bar'])也適用於字符串,並返回給定索引處的字符。類型雜耍將字符串'type'轉換爲整數0,因此您將得到字符串的第一個字符。

我不確定你想要什麼,實際上,如果echo $field不好。除非詢問,否則PHP將不會打印換行符或分隔符,因此您可能需要嘗試echo $field . ' ',並看到這些值實際上是不同的。

+0

我做了'echo $ field',之後所有東西都清晰了!明智的答案,非常感謝,這是如何看起來像(解釋的東西,而不是直接的答案/代碼)。謝謝! :) – Wordpressor 2012-03-27 01:57:15

1

foreach遍歷所有元素$data['fields']。在第一次迭代中,$field將爲"my_type",第二次迭代$field將爲"bar"等。即,在每次迭代中,$field將是一個字符串,而不是一個數組。

您將需要一個數組的數組爲循環是有道理的,如:

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

'...'value'),'應該是''value',',對嗎? – bfavaretto 2012-03-27 02:03:59

+0

是的。只需複製並粘貼OP的代碼即可。 :) – deceze 2012-03-27 03:02:03

2

當你遍歷領域是以下幾點:使用

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

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

在每次迭代中,$field已經是您正在查找的值(my_type,bar,value ),所以像@zneak提到的那樣做$ field ['type']將會讓php把'type'變成0,因此你得到了第一個字符。

中獲取價值,當你在類型鍵,就可以執行以下操作:

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

你的陣列「領域」是這樣的:

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

意味着,您的陣列只一個尺寸。 因此像上面那樣訪問它。
在foreach中,您告訴php要通過鍵(type,foo,ect)。所以$ field已經是(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; 
} 
} 
相關問題