猿问

如何替换数组中的数据

当前数组结构


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 above


foreach($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"

    ]

]


Smart猫小萌
浏览 330回答 3
3回答

catspeake

其他答案显示了如何使用参考变量解决此问题。如果要分配给数组,则需要使用以下内容对其进行索引$key:foreach($izero['data'] as $key => $value) {    if($value['ref_num'] === null) {        $value['ref_num'] = $value['id'];    }    $izero['data'][$key] = $value;}

萧十郎

对代码进行了一些调整,如果您将 更改foreach为 use &$value,那么您可以就地更新该值,而不必在循环结束时重新分配该值。您也有($value['ref_num'] === null),因为您检查它是否为空(在值和类型中)并且您的数组似乎有"". 所以你应该改变测试......foreach($izero['data'] as $key => &$value) {    if(empty($value['ref_num'])) {        $value['ref_num'] = $value['id'];    }}

慕慕森

你$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'])) {
随时随地看视频慕课网APP
我要回答