当前数组结构
array:2 [
"name" => "john"
"data" => array:3 [
0 => array:2 [
"id" => 191109
"ref_num" => "INV9002"
]
1 => array:2 [
"id" => 191110
"ref_num" => ""
]
]
如果ref_num
为空,我会尝试将id
复制到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"
]
]
发布于 2019-06-19 17:26:11
其他答案显示了如何使用引用变量修复此问题。如果要赋值给数组,则需要使用$key
对其进行索引
foreach($izero['data'] as $key => $value) {
if($value['ref_num'] === null) {
$value['ref_num'] = $value['id'];
}
$izero['data'][$key] = $value;
}
发布于 2019-06-19 17:23:18
您每次都会覆盖$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
,空字符串""
不是===
。您可能需要检查""
、0
、null
和false
的empty
if(empty($value['ref_num'])) {
发布于 2019-06-19 17:23:49
对代码进行了一些调整,如果您将foreach
更改为使用&$value
,那么您可以就地更新值,而不必在循环结束时重新赋值。
您还可以使用($value['ref_num'] === null)
,以检查它是否为空(值和类型都为空),并且您的数组似乎具有""
。所以你应该改变测试。
foreach($izero['data'] as $key => &$value) {
if(empty($value['ref_num'])) {
$value['ref_num'] = $value['id'];
}
}
https://stackoverflow.com/questions/56672945
复制相似问题