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

PHP中提取多维数组中指定键的所有值并拼接为字符串的实现方法

PHP中提取多维数组中指定键的所有值并拼接为字符串的实现方法

嘿,这个需求我太熟了!对付这种嵌套层级没谱的多维数组,递归绝对是最优解,不管它嵌套多少层inner,都能把所有content的值捞出来。下面给你具体实现步骤:

首先得先修正你给的JSON语法问题——原JSON里数组和对象的写法混了,正确的格式应该是把foo、bar这些改成对象(用{}而不是[]),不然解析会报错。修正后的JSON大概是这样:

{
  "foo": {
    "content": "hi",
    "inner": []
  },
  "bar": {
    "content": "hi2",
    "inner": [
      {
        "bat": {
          "content": "hi3",
          "inner": []
        }
      }
    ]
  }
}

接下来就是核心的PHP实现代码,用递归函数来遍历所有层级:

// 递归收集指定键值的函数
function collectTargetValues($array, $targetKey = 'content') {
    $collected = [];
    foreach ($array as $element) {
        // 如果当前元素是数组,继续深入处理
        if (is_array($element)) {
            // 检查当前数组有没有目标键,有的话就存起来
            if (isset($element[$targetKey])) {
                $collected[] = $element[$targetKey];
            }
            // 递归处理当前数组的所有子元素,合并结果
            $collected = array_merge($collected, collectTargetValues($element));
        }
    }
    return $collected;
}

// 把JSON字符串转成PHP关联数组
$jsonString = '{
  "foo": {
    "content": "hi",
    "inner": []
  },
  "bar": {
    "content": "hi2",
    "inner": [
      {
        "bat": {
          "content": "hi3",
          "inner": []
        }
      }
    ]
  }
}';
$dataArray = json_decode($jsonString, true);

// 收集所有content的值
$allContent = collectTargetValues($dataArray);

// 拼接成单个字符串,这里用空格分隔,你可以换成空字符串或者其他符号
$resultString = implode(' ', $allContent);

// 输出结果:hi hi2 hi3
echo $resultString;

简单解释下这个逻辑:

  • 递归函数collectTargetValues会一层一层遍历数组,遇到子数组就钻进去继续找;
  • 每碰到一个content键,就把对应的值放进收集数组;
  • 最后用implode把所有收集到的值拼接成你需要的字符串,分隔符可以按需调整(比如直接拼接就用implode('', $allContent))。

要是你的数组里还混有对象(比如json_decode没加true参数转成对象的情况),只需要稍微改下函数里的判断:把isset($element[$targetKey])改成isset($element->$targetKey),同时收集值的时候用$element->$targetKey就行,灵活得很!

备注:内容来源于stack exchange,提问作者Walrus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 12:48:15