为了账号安全,请及时绑定邮箱和手机立即绑定

如何替换数组中的数据

如何替换数组中的数据

PHP
Smart猫小萌 2021-08-28 16:25:22
当前数组结构array:2 [  "name" => "john"  "data" => array:3 [    0 => array:2 [      "id" => 191109      "ref_num" => "INV9002"    ]    1 => array:2 [      "id" => 191110      "ref_num" => ""    ]  ]我试图复制id到ref_numifref_num为空。到目前为止,我确实尝试过代码$izero = //that data structure aboveforeach($izero['data'] as $key => $value) {        if($value['ref_num'] === null) {            $value['ref_num'] = $value['id'];        }        $izero['data'] = $value;    }$echo $izero结果izero错过了第二个数组。它只保留第一个数组。例如,如果我data有 50 个数组,现在它成为唯一一个有第一个数组的数组。预期的结果应该是这样的array:2 [  "name" => "john"  "data" => array:3 [    0 => array:2 [      "id" => 191109      "ref_num" => "INV9002"    ]    1 => array:2 [      "id" => 191110      "ref_num" => "191110"    ]]
查看完整描述

3 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

其他答案显示了如何使用参考变量解决此问题。如果要分配给数组,则需要使用以下内容对其进行索引$key:


foreach($izero['data'] as $key => $value) {

    if($value['ref_num'] === null) {

        $value['ref_num'] = $value['id'];

    }

    $izero['data'][$key] = $value;

}


查看完整回答
反对 回复 2021-08-28
?
萧十郎

TA贡献1815条经验 获得超13个赞

对代码进行了一些调整,如果您将 更改foreach为 use &$value,那么您可以就地更新该值,而不必在循环结束时重新分配该值。


您也有($value['ref_num'] === null),因为您检查它是否为空(在值和类型中)并且您的数组似乎有"". 所以你应该改变测试......


foreach($izero['data'] as $key => &$value) {

    if(empty($value['ref_num'])) {

        $value['ref_num'] = $value['id'];

    }

}



查看完整回答
反对 回复 2021-08-28
?
慕慕森

TA贡献1856条经验 获得超17个赞

你$izero['data']每次都覆盖。只需引用&该值,然后您就可以更改它:


foreach($izero['data'] as &$value) {

        if($value['ref_num'] === null) {

            $value['ref_num'] = $value['id'];

        }

}

或者按键修改:


foreach($izero['data'] as $key => $value) {

        if($value['ref_num'] === null) {

            $izero['data'][$key]['ref_num'] = $value['id'];

        }

}

此外,你不显示数据的实际值和空字符串""是不===给null。您可能要empty来检查"",0,null和false:


        if(empty($value['ref_num'])) {


查看完整回答
反对 回复 2021-08-28
  • 3 回答
  • 0 关注
  • 329 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信