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
相关产品推荐
相关产品推荐

