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 に答える