2012-07-10 134 views
1

我有一個數組,看起來像這樣:添加元素陣列

array 
    0 => 
    array 
     'title' => string 'Ireland - Wikipedia, the free encyclopedia' 
     'url' => string 'http://en.wikipedia.org/wiki/Ireland' 
    1 => 
    array 
     'title' => string 'Ireland's home for accommodation, activities.' 
     'url' => string 'http://www.ireland.com/' 

,我想的得分爲0添加到每個元件。我想這個簡單的foreach循環會做的伎倆,但...嗯....它沒有:/

public function setScore($result) 
{ 
    foreach($result as $key) 
    { 
     $key = array('title', 'url', 'score' => 0); 
    } 
    return $result; 
} 

有人能幫助我嗎?

感謝

+0

您要更改$鍵沒有好,如果你真的不得不這樣做,然後使用基準即& $ key,我相信你不想在這裏,你可能需要$ res = array()並使用$ res [] = array(....)然後print_r($ res) – 2012-07-10 13:18:27

回答

3

您在這裏創建一個新的數組並與它無關:

foreach($result as $key){ 
    $key = array('title', 'url', 'score' => 0); 
} 

你想要做的是修改參照現有的:

foreach($result as &$key){ # Note the '&' here 
    $key['score'] = 0; 
} 
+0

非常感謝您的幫助,我認爲我現在理解foreach循環好一點。 – shanahobo86 2012-07-10 13:21:37

6

foreach作品在複製陣列的。你可以修改所有你想要的$key,這不會反映在原始數組上。

您可以參考$key使用雖然,然後它會按預期工作:

foreach ($result as &$value) { 
    $value['score'] = 0; 
} 

手動輸入:http://php.net/manual/en/control-structures.foreach.php

+0

這個答案可能有點混亂,因爲不能通過引用訪問數組鍵。您實際上正在訪問數組值 - 名爲'$ key'。 'foreach($ result爲$ key =>&$ value)' – feeela 2012-07-10 13:20:10

+1

同意,錯誤的命名。 – deceze 2012-07-10 13:21:44

2

雖然deceze是正確的,你也可以做到這一點使用array_walk(),像這樣:

array_walk($result, function(&$el) { $el['score'] = 0; }); 
0

這裏是如何做到這一點的例子。

$array = array(array('title' => "Ireland - Wikipedia, the free encyclopedia", 'url' => "http://en.wikipedia.org/wiki/Ireland"), array('title' => "Ireland's home for accommodation, activities.", 'url' => "http://www.ireland.com/")); 

function setScore($result) 
{ 
    foreach($result as &$element) 
    { 
     $element['score'] = 0; 
} 
    return $result; 
} 

$array = setScore($array); 

print_r($array); 

你也可以這樣做:

function setScore(&$result) 
{...} 

,然後只是:

setScore($array);