多条件if语句失效求助:PHP数组令牌无法分别获取
问题解决:令牌数组处理时第二个if语句不生效的原因及修复方案
嘿,我一眼就看出问题出在哪啦!咱们先拆解下你的代码逻辑:
你一开始有个包含web_tokens和phone_tokens的关联数组$tokens,但在第一个if语句里,你直接把原数组变量$tokens给覆盖了:
if(!empty($tokens['web_tokens'])) { $tokens = explode(',',$tokens['web_tokens']); // 这里把原关联数组改成了索引数组! print_r($tokens); }
执行完这一步,原来的关联数组已经变成了只有web令牌的索引数组,再也找不到phone_tokens这个键了,第二个if的判断自然永远不成立,根本不会执行。
修复方案1:用新变量存储分割结果(推荐,不破坏原数组)
把分割后的令牌存到新变量里,保留原数组的完整结构:
// 假设这是你的原数组 $tokens = [ 'web_tokens' => 'ft2TxdXhon8,fYTsgCoCrBY', 'phone_tokens' => 'c-hqzdEjs2M,dWahJ8MOfXY,dkYoMgoPNN8' ]; // 处理web令牌,存到新变量 if(!empty($tokens['web_tokens'])) { $webTokens = explode(',', $tokens['web_tokens']); print_r($webTokens); } // 原数组没被破坏,正常访问phone_tokens键 if(!empty($tokens['phone_tokens'])) { $phoneTokens = explode(',', $tokens['phone_tokens']); print_r($phoneTokens); }
修复方案2:更新原数组的对应键值(适合需要保留原结构的场景)
如果想把分割后的结果存回原数组,只修改对应键的值就行,不会丢失其他字段:
$tokens = [ 'web_tokens' => 'ft2TxdXhon8,fYTsgCoCrBY', 'phone_tokens' => 'c-hqzdEjs2M,dWahJ8MOfXY,dkYoMgoPNN8' ]; if(!empty($tokens['web_tokens'])) { $tokens['web_tokens'] = explode(',', $tokens['web_tokens']); // 只更新web_tokens的值 print_r($tokens['web_tokens']); } if(!empty($tokens['phone_tokens'])) { $tokens['phone_tokens'] = explode(',', $tokens['phone_tokens']); // 正常访问phone_tokens print_r($tokens['phone_tokens']); }
这样两个if语句就能正常执行,分别输出对应的令牌数组啦!
内容的提问来源于stack exchange,提问作者Shihas
相关产品推荐
相关产品推荐

