迭代/以编程方式替换多维数组中的值(在 Codeigniter 或 PHP 中)

iteratively / programmatically replace a value in a multidimensional array (in Codeigniter or PHP)

我找到了这个问题的几个据称的解决方案,但是当我尝试实施它们时,它们不起作用。

$a = array('val'=>10, 'name'=>'Name of A', 'item3'=>'item3forA');
$b = array('val'=>20, 'name'=>'Name of B', 'item3'=>'item3forB');
$c = array('val'=>30, 'name'=>'Name of C', 'item3'=>'item3forC');
$d = array('val'=>40, 'name'=>'Name of D', 'item3'=>'item3forD');
$rlist = array($a, $b, $c, $d);

我需要一种方法来递归/迭代地替换 'val' 键的值,使它们全部为零 (0) 值。

我尝试过的众多解决方案中有两个是 and 。我还会注意到,如果我 'explicitly' 将密钥设置为零 $a['val']=0; $b['val']=0; 等,那是可行的,但我宁愿使用更少的代码将其设置为零(实际程序有 20 个多维数组来修改).

使用给定数组的引用并设置 val = 0.

foreach($rlist as &$data){
  $data['val'] = 0;
}

PHP 除非另有明确说明,否则按值赋值,所以当你这样做时

$rlist = array($a, $b, $c, $d);

$rlist 的内部数组将是 $a$b$c 和 [=] 的 16=],而不是对那些实际变量的引用。因此,如果您遍历 $rlist 并修改其值,您将不会看到这些更改反映在原始 $a$b 等变量中。

如果您需要这样做,您可以通过引用将这些变量分配给 $rlist,也可以在迭代 $rlist 时使用引用,如其他答案所示。

$rlist = array(&$a, &$b, &$c, &$d);

您可能会根据它们与其余代码的配合程度考虑的其他可能性是

  • $a 等的值直接分配给 $rlist['a'] 等,在您当前将它们定义为单个变量的地方
  • 使用 stdClass 对象(或您定义的 class 的实例)而不是数组,不需要通过引用来赋值 $rlist