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;
}

有人可以帮我吗?

谢谢

4

4 回答 4

6

foreach适用于数组的副本。您可以随意修改$key,它不会反映在原始数组上。

您可以$key 通过引用使用,然后它将按预期工作:

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

手动输入: http: //php.net/manual/en/control-structures.foreach.php

于 2012-07-10T13:16:57.093 回答
3

你在这里创建了一个新数组并且什么都不做:

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

您要做的是修改对现有引用的引用:

 foreach($result as &$key){  # Note the '&' here
     $key['score'] = 0;
 }
于 2012-07-10T13:17:58.783 回答
2

尽管 deceze 是对的,但您也可以使用 来执行此操作array_walk(),如下所示:

array_walk( $result, function( &$el) { $el['score'] = 0; });
于 2012-07-10T13:20:21.143 回答
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 );
于 2012-07-10T13:27:57.353 回答