我正在遍历一堆数据,而我似乎正在做一些感觉有点重复的事情。
if(!isset($productitems[$stop->route_id])){
$productitems[$stop->route_id] = [];
}
if(!isset($productitems[$stop->route_id][$location_id])){
$productitems[$stop->route_id][$location_id] = [];
}
if(!isset($productitems[$stop->route_id][$location_id][$week])){
$productitems[$stop->route_id][$location_id][$week] = [];
}
if(!isset($productitems[$stop->route_id][$location_id][$week][$day])){
$productitems[$stop->route_id][$location_id][$week][$day] = [];
}
if(!isset($productitems[$stop->route_id][$location_id][$week][$day][$task->product_id])){
$productitems[$stop->route_id][$location_id][$week][$day][$task->product_id] = [];
}
if(!isset($productitems[$stop->route_id][$location_id][$week][$day][$task->product_id][(int)$task->refill_id])){
$productitems[$stop->route_id][$location_id][$week][$day][$task->product_id][(int)$task->refill_id] = 0;
}
在没有所有isset检查的情况下,是否有不同的方法来填充这些多维数组?
编辑我知道只是在php中设置$productitems[$stop->route_id][$location_id][$week][$day][$task->product_id][(int)$task->refill_id]
是可能的,但是php会记录一个警告,我正在处理的项目使用Laravel会抛出异常。
答案 0 :(得分:2)
如果子密钥不存在,PHP会自动创建子密钥(您可以通过选中isset
来避免通知)。如果您愿意,可以随意创建一个为您完成的功能(最小化变量的双重粘贴。
<强>代码强>:
<?php
error_reporting(E_ALL);
function setDefault(&$variable, $default) {
if (!isset($variable)) {
$variable = $default;
}
}
$foo = array(
'foo' => 'oof'
);
setDefault($foo['sub']['arrays']['are']['pretty']['cool'], 0);
print_r($foo);
?>
<强>输出强>:
Array
(
[foo] => oof
[sub] => Array
(
[arrays] => Array
(
[are] => Array
(
[pretty] => Array
(
[cool] => 0
)
)
)
)
)
3v4l表示4.3.0到5.5.6的任何PHP版本都没有通知,而this明显吐出通知。
如果您不想使用某个功能,请随意使用代码中的最后if
条件:
<?php
error_reporting(E_ALL);
$foo = array(
'foo' => 'oof'
);
if (!isset($foo['sub']['arrays']['are']['pretty']['cool'])) {
$foo['sub']['arrays']['are']['pretty']['cool'] = 0;
}
print_r($foo);
?>
答案 1 :(得分:0)
好的php不需要声明所有内容,所以我会说你不需要任何这些。我只是在命令提示符下在我的本地机器上尝试了它,这是输出...
CODE:
<?php
$productitems['a']['b']['c']['d']['e']['f'] = 65;
var_dump($productitems);
?>
输出:
array(1) {
["a"]=>
array(1) {
["b"]=>
array(1) {
["c"]=>
array(1) {
["d"]=>
array(1) {
["e"]=>
array(1) {
["f"]=>
int(65)
}
}
}
}
}
}