将值附加到多维数组 PHP

Posted

技术标签:

【中文标题】将值附加到多维数组 PHP【英文标题】:Append value to multidimensional array PHP 【发布时间】:2018-03-08 03:57:34 【问题描述】:

我在 php 中有一个多维数组,显示为:

Array
(
    [0] => Array
    (
        [background] => https://example.com/image.jpg
        [description] => Example text
        [url] => https://example.com
    )

    [1] => Array
    (
        [background] => https://example.com/image.jpg
        [description] => Example text
        [url] => https://example.com
    )
)

我想遍历这个数组并将相同的参数附加到两个url 键。我尝试通过一个带有双 foreach 循环的函数来执行此操作,并且能够成功附加参数,但我无法返回包含更新值的数组。

这是我尝试过的:

致电

$array = append_field($array, 'url', '?parameter=test');

功能

function append_field($array, $field, $parameter)

    foreach ($array as $inner_array) :
        foreach ($inner_array as $key => $append) :
            if ($key == $field) :
                $append .= $parameter;
            endif;
        endforeach;
    endforeach;

    return $array;

【问题讨论】:

【参考方案1】:

您需要在两个 foreach 循环中将数组值作为引用传递才能写入它们。否则,您将迭代您的值的副本。

参考:http://php.net/manual/en/language.references.php

function append_field($array, $field, $parameter)

    foreach ($array as &$inner_array) :
        foreach ($inner_array as $key => &$append) :
            if ($key == $field) :
                $append .= $parameter;
            endif;
        endforeach;
    endforeach;

    return $array;

但您也可以不使用引用来执行此操作,这次是通过写入包含两个键的完整数组路径:

function append_field($array, $field, $parameter)

    foreach ($array as $i => $inner_array) :
        foreach ($inner_array as $key => $append) :
            if ($key == $field) :
                $array[$i][$key] .= $parameter;
            endif;
        endforeach;
    endforeach;

    return $array;

【讨论】:

【参考方案2】:

只要改变这一行

$append .= $parameter;

到这里

$inner_array[$key] = $append.$parameter

foreach ($array as $inner_array):foreach ($array as &$inner_array) :

【讨论】:

【参考方案3】:

还有一些方法可以达到同样的效果,例如使用array_map()

[akshay@localhost tmp]$ cat test.php
<?php
$arr = array(
    array(
        'background'=>'https://example.com/image.jpg',
        'description'=>'Example text',
        'url'=>'https://example.com'
    ),
    array(
        'background'=>'https://example.com/image.jpg',
        'description'=>'Example text',
        'url'=>'https://example.com'
    ),

);

$append = array('url'=>'?parameter=test');
print_r( 
    array_map(function($item) use ($append) foreach($append as $k => $v) if(isset($item[$k]))$item[$k].=$v;return $item;, $arr )
);


?>

输出:

[akshay@localhost tmp]$ php test.php
Array
(
    [0] => Array
        (
            [background] => https://example.com/image.jpg
            [description] => Example text
            [url] => https://example.com?parameter=test
        )

    [1] => Array
        (
            [background] => https://example.com/image.jpg
            [description] => Example text
            [url] => https://example.com?parameter=test
        )

)

【讨论】:

以上是关于将值附加到多维数组 PHP的主要内容,如果未能解决你的问题,请参考以下文章

PHP多维数组到无序列表,建立url路径

通过 ajax 到 PHP 的多维数组

如何在postgresql过程中为多维数组赋值

php中的二维多维数组到一维数组[重复]

将php多维数组输出到html表

php 多个多维数组求交集