假设我有一个如下数组:
$list[] = array('a' => 1, 'b' => 4);
$list[] = array('a' => 2, 'b' => 5);
$list[] = array('a' => 3, 'b' => 6);
是否可以向所有数组元素添加新的Key & Value
c => null
,但 WITHOUT 循环遍历所有记录或使用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);
实际上,我正在考虑在运行中制作第二个数组并将其与原始数组合,或者只是循环遍历数组并扩展它,然而,只是想知道是否有更好的替代方法可以做这一点。
答案 0 :(得分:2)
不,如果没有遍历数组,无论是通过for循环显式,还是隐式使用array_walk或类似
,都无法做到这一点答案 1 :(得分: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] =>
)
)