【问题标题】:iteratively / programmatically replace a value in a multidimensional array (in Codeigniter or PHP)以迭代/编程方式替换多维数组中的值(在 Codeigniter 或 PHP 中)
【发布时间】:2020-10-22 13:55:28
【问题描述】:

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

$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) 值。

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

【问题讨论】:

  • 只需循环和分配。确保编辑子数组的相同副本。
  • 你能分享更多细节吗?你试过什么了?你被困在哪里了?

标签: php codeigniter multidimensional-array


【解决方案1】:

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

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

$rlist 的内部数组将是$a$b$c$d,而不是对这些实际变量的引用。因此,如果您正在迭代 $rlist 并修改其值,您将不会看到这些更改反映在原始 $a$b 等变量中。

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

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

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

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

【讨论】:

  • 做到了!太感谢了! :) 这个 $rlist 修改,结合@JitendraYadav 的foreach 循环是解决方案。
【解决方案2】:

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

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

【讨论】:

  • 此代码无效。我理解这段代码,并相信它应该 工作,但它就是不工作。如果我尝试在“if”语句中执行此操作,应该没有关系,对吧?
  • 我改变了你的问题,你应该先定义$a, $b, $c, $d,然后将它们分配给$rlist
  • 我理解您的编辑。有道理,这就是我正在做的。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 2016-09-26
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多