2

假设我有一个如下数组:

$list[] = array('a' => 1, 'b' => 4);
$list[] = array('a' => 2, 'b' => 5);
$list[] = array('a' => 3, 'b' => 6);

是否可以向所有数组元素添加新的Key & Valuelike ,但循环所有记录或使用相似函数?c => nullmap

最终结果应该与此类似:

$list[] = array('a' => 1, 'b' => 4, 'c' => null);
$list[] = array('a' => 2, 'b' => 5, 'c' => null);
$list[] = array('a' => 3, 'b' => 6, 'c' => null);

实际上,我正在考虑即时制作第二个数组并将其组合到原始数组,或者只是循环遍历数组并扩展它,只是想知道是否有更好的替代方法可以做到这一点。

4

2 回答 2

2

不,你不能在不遍历数组的情况下执行此操作,要么显式通过 for 循环,要么隐式使用 array_walk 或类似的

于 2013-04-02T08:47:30.123 回答
2

无耻:

array_walk($list, function(&$v){ $v['c'] = null; });

好的进一步评论

如果您担心数组的结构并希望某些键存在,即使它们没有明确定义,那么您正在尝试描述特定的东西 - 在这种情况下,您最好在类中定义该对象 - 从可读性和诚信的立场。

例如:

class MyObject {
  public $a; 
  public $b; 
  public $c;
  function __construct(){
     // this line is lazy but it's just a demo
     list($a,$b,$c) = func_get_args();
     $this->a = $a;
     $this->b = $b;
     $this->c = $c;
  }
}

$list[] = new MyObject(1, 4);
$list[] = new MyObject(2, 5);
$list[] = new MyObject(3, 6);

print_r($list);

运行代码

在这种情况下——如果我们没有在构造函数中指定“c” ——它仍然被隐式设置为null。因此,您之后不需要$list再次循环遍历数组。尽管为了完整起见,我可能应该在这里指出,可能存在速度-内存权衡。

输出:

Array
(
    [0] => MyObject Object
        (
            [a] => 1
            [b] => 4
            [c] => 
        )

    [1] => MyObject Object
        (
            [a] => 2
            [b] => 5
            [c] => 
        )

    [2] => MyObject Object
        (
            [a] => 3
            [b] => 6
            [c] => 
        )

 )

于 2013-04-02T08:49:57.273 回答