当前数组结构
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"
]
]
答案 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
检查""
,0
,null
和false
:
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;
}