2017-09-26 101 views
2

我在PHP多维数组显示为:追加值到多维数组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; 
} 

回答

3

你需要传递数组值均参考的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; 
} 
3

只是改变这一行

$append .= $parameter; 

to this

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

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

2

一些更多的方式,使用相同的实现结果,例如array_map()

[[email protected] 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) 
); 


?> 

输出:

[[email protected] 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 
     ) 

)