如何替换数组中的数据

时间:2019-06-19 17:20:13

标签: php

当前数组结构

array:2 [
  "name" => "john"
  "data" => array:3 [
    0 => array:2 [
      "id" => 191109
      "ref_num" => "INV9002"
    ]
    1 => array:2 [
      "id" => 191110
      "ref_num" => ""
    ]
  ]

如果id为空,我正在尝试将ref_num复制到ref_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"
    ]
]

3 个答案:

答案 0 :(得分:1)

您每次都覆盖$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检查""0nullfalse

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

答案 1 :(得分:1)

代码有几处调整,如果将foreach更改为使用&$value,则可以就地更新值,而不必在结尾处重新分配值。循环。

此外,您还有($value['ref_num'] === null),因为您检查它是否为null(值和类型均为null),并且数组似乎具有""。所以你应该改变测试...

foreach($izero['data'] as $key => &$value) {
    if(empty($value['ref_num'])) {
        $value['ref_num'] = $value['id'];
    }
}

答案 2 :(得分:1)

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

foreach($izero['data'] as $key => $value) {
    if($value['ref_num'] === null) {
        $value['ref_num'] = $value['id'];
    }
    $izero['data'][$key] = $value;
}