将具有固定值的新列附加到二维数组的每一行

问题描述 投票:0回答:5

我有一个看起来像这样的数组:

$array = [
    [
        'title' => 'Ireland - Wikipedia, the free encyclopedia',
        'url' => 'http://example.com/wiki/Ireland'
    ],
    [
        'title' => 'Ireland\'s home for accommodation, activities.',
        'url' => 'http://www.example.com/'
    ]
];

我想向每行添加一个值为 0 的

score
元素。我以为这个简单的 foreach 循环就可以解决问题,但是……嗯……事实并非如此。 :/

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

有人可以帮我吗?

php arrays multidimensional-array append
5个回答
6
投票

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

您可以使用

$key
通过参考,然后它会按预期工作:

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

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


3
投票

您在此处创建一个新数组,但不对其执行任何操作:

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

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

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

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

0
投票

对于将具有静态值的新列附加到二维数组的所有关联行的任务,有多种可行的方法。 以下所有内容都将创建一个具有相同所需结果的数组。我将避免重复已经发布的确切技术。

下面的一些脚本使用数组并集运算符 (

+
) 或数组并集赋值运算符 (
+=
) 合并关联数据。

  1. 使用

    array_map()
    使用扩展数据创建一个新数组。 演示

    var_export(
        array_map(
            fn($row) => $row + ['score' => 0],
            $array
        )
    );
    

  2. 使用

    array_walk()
    按行进行修改。 演示

    array_walk(
        $array,
        fn(&$row) => $row['score'] = 0
    );
    var_export($array);
    

    或者传入静态元素作为第三个参数。 演示

    array_walk(
        $array,
        fn(&$row, $_, $new) => $row += $new,
        ['score' => 0]
    );
    var_export($array);
    

  3. foreach()
    循环内通过引用修改行。
    +=
    的行为与仅仅分配元素不同,因为如果
    score
    元素已经存在,则不会被覆盖。如果仅在未声明或值为 null 时才需要分配值,请使用
    $row['score'] ??= 0;
    Demo

    foreach ($array as &$row) {
        $row += ['score' => 0];
    }
    var_export($array);
    

    对称数组解构语法也可用于避免访问与操作无关的数据。 演示

    foreach ($array as ['score' => &$s]) {
        $s = 0;
    }
    var_export($array);
    
© www.soinside.com 2019 - 2024. All rights reserved.