PHP多维数组元素访问异常:无法访问返回数组中的子数组
解决多维数组元素访问问题的排查步骤
嘿,我来帮你搞定这个多维数组访问的坑!从你描述的情况和给出的代码片段来看,大概率是数组初始化或者整合的方式出了问题,导致子数组的结构和你预期的不一样。咱们一步步来排查:
1. 先修正数组初始化的写法
你代码里写的$bloggArr[] = array();是往数组里添加一个空数组元素,而不是初始化一个空数组!正确的初始化空数组应该是:
$bloggArr = []; // 或者 $bloggArr = array();
如果用错误的写法,后续往$bloggArr里添加元素时,数组结构会变成[[], 你的实际元素],嵌套了多余的一层,自然就没法按预期访问子数组了。
2. 确认$result的实际结构
不管初始化有没有问题,先把$result的完整结构打出来看看,用这两个函数:
var_dump($result); // 或者更易读的 print_r($result);
比如如果初始化错了,你会看到$result['blogg']是一个包含空数组和实际数据的二维数组;如果是填充元素时多嵌套了一层,也能一眼看出来。
3. 正确的数组整合与访问示例
给你一个标准的写法参考,你可以对照调整自己的代码:
public function search($searchString) : array { // 正确初始化三个空数组 $bloggArr = []; $bloggerArr = []; $innleggArr = []; // 假设这里是你填充数组的逻辑,比如添加类实例 $bloggArr[] = new Blogg(); // 直接往数组里加类对象 $bloggerArr[] = new Blogger(); $innleggArr[] = new Innlegg(); // 把三个数组作为子数组整合到$result $result = [ 'blogg' => $bloggArr, 'blogger' => $bloggerArr, 'innlegg' => $innleggArr ]; return $result; }
之后访问子数组元素时,就可以按层级来:
$searchResult = $yourClassInstance->search('你的搜索关键词'); // 检查blogg子数组是否有元素,再访问 if (!empty($searchResult['blogg'])) { $firstBlogg = $searchResult['blogg'][0]; // 调用类的方法或者访问属性,比如: echo $firstBlogg->getBlogName(); }
4. 排查其他可能的问题
- 如果你是用
array_merge()来整合三个数组,那$result会是一个没有键名的一维数组,没法用$result['blogg']这种方式访问,必须用索引,这也会导致你误以为无法访问子数组。 - 填充数组时有没有多套了一层数组?比如写了
$bloggArr[] = [new Blogg()];,这样每个元素都是数组,访问时需要多一层索引:$searchResult['blogg'][0][0]。
先按上面的步骤检查,应该就能找到问题所在啦!
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

