Tyl*_* V. 5 php arrays multidimensional-array
举个例子:
$data = array();
$data['a']['one'] = 'test';
Run Code Online (Sandbox Code Playgroud)
这将引发通知,因为$data['a']不存在。因此,我总是这样做:
$data = array();
$data['a'] = array();
$data['a']['one'] = 'test';
Run Code Online (Sandbox Code Playgroud)
或者如果我陷入循环,像这样:
$data = array();
foreach ($items as $item) {
if (!isset($data['a'])) {
$data['a'] = array();
}
$data['a']['one'] = $item->getId();
}
Run Code Online (Sandbox Code Playgroud)
这在代码中变得非常重复并且混乱。我知道我可以编写某种array_push替代函数来处理这个问题,但我想知道是否有一种方法可以使用现有的 PHP 方法来做到这一点。
首先在某处初始化整个数组(所有键、子数组等)是不切实际的。
这意味着记住并维护它 - 当您有以前未考虑到的新数据时,您还必须将其添加到数组初始化中。
(呃)
我至少会将 var 作为数组 ( $data = array();) 删除,那么你就不需要is_array()- 在你做任何有用的事情之前,这是一行烦人的代码(包括右大括号的两行......)。
但是,不需要您的检查。
您的代码检查数组的子数组是否已设置,如果没有,则将其设置为数组,然后将数据设置到其上。
这是不必要的,因为即使之前未设置某些子键/数组,您也可以在数组中设置数据。
例如,此代码(这是整个文件和所有运行的代码)不会抛出错误、警告或通知:
$data['a']['one']['blah']['foo'] = 'test';
print_r($data);
echo $data['a']['one']['blah']['foo'];
Run Code Online (Sandbox Code Playgroud)
以上输出:
Array ([a] => Array ( [one] => Array ( [blah] => Array ( [foo] => test ) ) ) )
test
上面的代码不会返回任何警告/通知/错误。
另请注意,我什至没有$data = array()。
(尽管您想要这样做,因为您可能使用 foreach 并且初始化不需要使用 is_array )。
那是与error_reporting(-1);
因此,要回答你的问题,在你的代码中你可以这样做(并且不会收到错误/通知/警告):
$data = array();
// more data setting the array up
foreach ($items as $item) {
$data['a']['one'] = $item->getId();
}
Run Code Online (Sandbox Code Playgroud)