2012-07-10 119 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);