php多维数组加索引,PHP在没有通知的情况下为多维数组添加新索引

举个例子:

$data = array();

$data['a']['one'] = 'test';

这将发出通知,因为$data [‘a’]不存在.所以相反,我总是这样做:

$data = array();

$data['a'] = array();

$data['a']['one'] = 'test';

或者,如果我在循环中,这样的事情:

$data = array();

foreach ($items as $item) {

if (!isset($data['a'])) {

$data['a'] = array();

}

$data['a']['one'] = $item->getId();

}

这在代码中变得非常敏感并且凌乱.我知道我可以写一些array_push替代函数来处理这个,但我想知道是否有办法用现有的PHP方法做到这一点.

解决方法:

首先在某处初始化整个阵列(所有键,子阵列等)是不切实际的.

这意味着记住并维护它 – 当您有以前没有考虑过的新数据时,您还必须将其添加到阵列初始化中.

(Urgh)

我至少将var作为一个数组($data = array();),然后你不需要is_array() – 这是一个令人讨厌的单行代码,甚至你做任何有用的事情(两行包括右括号). ).

但是,不需要您的检查.

您的代码检查是否已设置数组的子数组,如果没有,则将其设置为数组,然后将数据设置到其上.

这不是必需的,因为即使先前未设置某些子键/数组,您也可以在数组中设置数据.

例如,此代码(这是整个文件和所有运行的代码)不会抛出错误,警告或通知:

$data['a']['one']['blah']['foo'] = 'test';

print_r($data);

echo $data['a']['one']['blah']['foo'];

以上输出:

数组([a] =>数组([one] =>数组([blah] =>数组([foo] => test))))

测试

上述代码不会返回任何警告/通知/错误.

另请注意,我甚至没有$data = array().

(虽然你想,因为你可能使用foreach并且初始化否定了使用is_array的需要).

这是与error_reporting(-1);

TL; DR; – 答案

因此,要回答您的问题,您可以在代码中执行此操作(并且不会收到任何错误/通知/警告):

$data = array();

// more data setting the array up

foreach ($items as $item) {

$data['a']['one'] = $item->getId();

}

标签:php,arrays,multidimensional-array

来源: https://codeday.me/bug/20190708/1401593.html

你可能感兴趣的:(php多维数组加索引)