PHP中如何动态生成字符串键名二维数组 按目标URL对父URL分组
错误写法原因说明
$allLinks[$destination] .= [$parent]:.=是PHP的字符串拼接运算符,仅适用于字符串操作,用于数组会触发强制类型转换,得到异常结果,不适用当前场景。array_push($allLinks[$destination], $parent):该函数要求传入的第一个参数必须是已初始化的数组,如果$allLinks中不存在$destination对应的键,直接调用会抛出警告,无法正常生成子数组。
正确实现代码
核心逻辑是每次处理行数据时,先对目标URL对应的子数组做初始化判断,再追加父页面URL:
// 初始化外层存储数组 $allLinks = []; // 此处的$rows为你按行拆分后的URL关联列表数组 foreach ($rows as $row) { // 按|拆分每行内容,同时去除两端多余空格 [$parent, $destination] = array_map('trim', explode('|', $row)); // 若目标URL对应的键不存在,先初始化为空数组 if (!isset($allLinks[$destination])) { $allLinks[$destination] = []; } // 追加父页面URL到对应子数组 $allLinks[$destination][] = $parent; }
如果你的运行环境支持PHP7.4及以上版本,可以用NULL合并赋值运算符简化初始化判断,替换上面的if判断代码即可:
$allLinks[$destination] ??= [];
执行完成后打印$allLinks即可得到你需要的结构。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

