Php 向数组中的所有现有记录添加新的键/值

Php 向数组中的所有现有记录添加新的键/值,php,arrays,Php,Arrays,假设我有一个如下所示的数组: $list[] = array('a' => 1, 'b' => 4); $list[] = array('a' => 2, 'b' => 5); $list[] = array('a' => 3, 'b' => 6); 是否可以向所有数组元素添加一个新的键和值如c=>null,但不循环遍历所有记录或使用map类似函数 最终结果应该与此类似: $list[] = array('a' => 1, 'b' => 4, '

假设我有一个如下所示的数组:

$list[] = array('a' => 1, 'b' => 4);
$list[] = array('a' => 2, 'b' => 5);
$list[] = array('a' => 3, 'b' => 6);
是否可以向所有数组元素添加一个新的
键和值
c=>null
,但不循环遍历所有记录或使用
map
类似函数

最终结果应该与此类似:

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

实际上,我正在考虑动态生成第二个数组并将其与原始数组合并,或者简单地在数组中循环并扩展它,然而,我只是想知道是否有更好的替代方法来实现这一点。

不,如果不遍历数组,就不能这样做,或者显式地通过for循环,或者隐式地使用array\u walk或类似的

不,如果不遍历数组,就不能这样做,或者显式地遍历for循环,或者隐式地使用array\u walk或类似的

不知羞耻地:

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] => 
        )

 )
厚颜无耻地:

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] => 
        )

 )



当C的所有值都相同时,有什么意义呢?你为什么不喜欢
foreach
array\u map
/
array\u walk
?我认为在某种程度上你必须在数组中循环,这是不可避免的。@路人只是在寻找一条合适的路,一条更好的路。。。只是学习新东西@Mahdi
foreach
/
array\u map
/
array\u walk
是正确的方法。当C的所有值都相同时,有什么意义?有什么原因你不同时喜欢
foreach
array\u map
/
array\u walk
?我认为在某种程度上你必须在数组中循环,这是不可避免的。@路人只是在寻找一条合适的路,一条更好的路。。。只是学习新东西@Mahdi
foreach
/
array\u map
/
array\u walk
是正确的方法。谢谢你的回答,但我会等着看有多少人投票给你的答案我很想知道答案,但我会等着看有多少人投你的票汉克斯,但我知道。如果你看看这个问题,你会发现我清楚地提到我正在寻找另一种方式,但无论如何,谢谢@马赫迪:别无选择——这就是问题所在。在某种程度上,系统必须循环通过一个数组——它是作为语言结构存在的整个点。不过,
array\u walk
的好处在于它是在内部处理的。@Mahdi在进一步的建设性说明中说-如果你需要用默认值描述对象,那么也许你应该定义一个?这样就可以在实例化时隐式地设置null,而不必在之后循环?为什么定义类更好?例如,它如何适合我的示例?感谢您的更新,我喜欢您的想法,但是我认为这会给运行时增加太多开销,但再次感谢您的解释和代码:)谢谢,但我知道这一点。如果你看看这个问题,你会发现我清楚地提到我正在寻找另一种方式,但无论如何,谢谢@马赫迪:别无选择——这就是问题所在。在某种程度上,系统必须循环通过一个数组——它是作为语言结构存在的整个点。不过,
array\u walk
的好处在于它是在内部处理的。@Mahdi在进一步的建设性说明中说-如果你需要用默认值描述对象,那么也许你应该定义一个?这样就可以在实例化时隐式地设置null,而不必在之后循环?为什么定义类更好?例如,它如何适合我的示例?感谢您的更新,我喜欢您的想法,但是我认为这会给运行时增加太多开销,但再次感谢您的解释和代码:)