PHP 7.1中读取关联数组值时遇到异常问题
解决PHP多维数组遍历取
account值返回NULL的问题 这种情况我之前排查过好多次,大概率是遍历层级不对或者数组结构和你预期的有细微差异,咱们一步步来定位问题:
1. 先核对遍历的层级是否匹配数组结构
你说var_dump看结构清晰,但很可能你遍历的是外层数组,而实际包含account键的子数组在更深一层。举个常见的例子:
假设你的
$listAccounts结构是这样的:$listAccounts = [ 'data' => [ ['account' => 'user1@example.com'], ['account' => 'user2@example.com'], ['account' => 'user3@example.com'], ['account' => 'user4@example.com'] ] ];
如果直接写foreach($listAccounts as $account),那每次循环拿到的$account是['data' => [...]]这个数组,里面根本没有account键,自然返回NULL。这时候你需要遍历$listAccounts['data']才对。
2. 检查键名的拼写和大小写
PHP数组的键名是严格区分大小写的!如果函数返回的数组里键名是Account或者ACCOUNT,而你写的是小写的account,那肯定取不到值。你可以在循环里加一行代码,打印当前遍历项的所有键名:
foreach($listAccounts as $account) { print_r(array_keys($account)); // 看看有没有你要的键名 }
3. 调试遍历的每一项内容
别光看整体的var_dump,在循环里单独打印每一个$account,确认它是不是你预期的包含account键的数组:
foreach($listAccounts as $account) { var_dump($account); // 看看当前项到底是什么 echo isset($account['account']) ? $account['account'] : 'NULL' . PHP_EOL; }
如果打印出来的$account是字符串、数字或者其他不包含account键的结构,那说明你遍历的层级错了。
4. 确认函数返回的是否是纯数组
有时候函数可能返回的是对象转成的数组,或者包含一些特殊的关联键(比如索引键和关联键混合),这时候也要注意取值路径。比如如果是对象转数组,可能会有$account->account这样的属性,转成数组后可能是$account['account'],但也有可能是$account['Account'],需要仔细核对。
示例正确代码(假设数组结构是外层有results键)
// 先确认整体结构 var_dump($listAccounts); // 遍历正确的子数组层级 foreach($listAccounts['results'] as $account) { if(isset($account['account'])) { echo $account['account'] . PHP_EOL; } else { echo "当前项无account键,内容为:"; var_dump($account); } }
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

