You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:36:01