PHP多维数组指定路径下将title元素移动/添加到首位置的实现方法
解决方案
你可以直接使用针对性逻辑处理,也可以修改原有函数使其支持指定子数组路径操作,两种实现方式如下:
方式1:直接针对当前需求实现
逻辑简单清晰,不需要改造原有函数:
// 取出svg子数组 $svgList = $arr['svg']; $titleNode = null; $newSvgList = []; // 遍历筛选原有title节点 foreach ($svgList as $node) { if (isset($node['title'])) { $titleNode = $node; continue; } $newSvgList[] = $node; } // 不存在title节点则新建 if (empty($titleNode)) { $titleNode = ['title' => 'test']; } // 将title节点插入数组头部 array_unshift($newSvgList, $titleNode); // 替换回原数组 $arr['svg'] = $newSvgList;
方式2:改造原有函数支持任意子数组路径操作
改造后的函数支持通过路径定位到任意层级的子数组进行操作,复用性更高:
/** * 将指定键名的元素移动到目标子数组头部,不存在则插入默认值 * @param array $originArray 原始根数组 * @param array $subPath 目标子数组的路径,例如操作$arr['svg']则传['svg'] * @param string $searchKey 要查找的元素键名,此处为'title' * @param mixed $defaultItem 元素不存在时的默认值 * @return array 处理后的完整数组 */ function prepend_to_subarray($originArray, $subPath, $searchKey, $defaultItem) { // 引用定位到目标子数组 $targetArr = &$originArray; foreach ($subPath as $key) { if (!isset($targetArr[$key]) || !is_array($targetArr[$key])) { return $originArray; } $targetArr = &$targetArr[$key]; } $foundItem = null; $tempArr = []; foreach ($targetArr as $item) { if (isset($item[$searchKey])) { $foundItem = $item; continue; } $tempArr[] = $item; } $targetItem = $foundItem ?? $defaultItem; array_unshift($tempArr, $targetItem); $targetArr = $tempArr; return $originArray; } // 调用示例 $arr = prepend_to_subarray($arr, ['svg'], 'title', ['title' => 'test']);
输出验证
两种方式最终输出的数组结构都和你给出的预期结果完全一致,不管原有svg数组中是否存在title节点、title节点在哪个位置,都会被放到索引0的位置。
内容的提问来源于stack exchange,提问作者user3436467
相关产品推荐
相关产品推荐

