PHP中array_push问题:数组总是被放入index[0]求排查
解决PHP中array_push导致子数组嵌套的问题
嘿,我来帮你捋清楚这个问题!你遇到的情况其实是array_push的特性导致的——当你直接把一个数组作为参数传给array_push时,它会把这个整个数组当作单个元素追加到目标数组里,所以才会出现link数组被放在index[0]子层级的情况。而你想要的是把link数组里的元素和comment放在同一层级,本质上是要合并两个数组的元素,而不是把一个数组作为元素塞进去。
正确的两种解决方式:
1. 使用array_merge合并数组
如果你的目标是把link数组的元素平级合并到原数组中,array_merge是最直接的选择:
// 假设你的原数组是$mainArray,link数组是$linkData $mainArray = array_merge($mainArray, $linkData);
这个方法会把两个数组的元素合并到一起,相同索引会被覆盖(如果有的话),新元素会追加到末尾,正好满足你让link和comment同层级的需求。
2. 用展开运算符配合array_push
如果你一定要用array_push函数,可以借助PHP的展开运算符(...),把link数组的元素拆解成单个参数传入:
// 同样假设原数组是$mainArray,link数组是$linkData array_push($mainArray, ...$linkData);
展开运算符会把$linkData里的每个元素单独作为array_push的参数,这样就不会把整个数组当作单个元素嵌套进去了。
举个错误 vs 正确的示例:
假设你原来的39-40行代码是这样的(错误写法):
// 错误:把整个link数组作为单个元素push $commentArray = ['comment' => '用户评论内容']; $linkArray = ['link' => 'https://example.com']; array_push($commentArray, $linkArray); // 结果会是:['comment' => '用户评论内容', 0 => ['link' => 'https://example.com']]
改成正确写法后:
// 用array_merge的正确写法 $commentArray = ['comment' => '用户评论内容']; $linkArray = ['link' => 'https://example.com']; $commentArray = array_merge($commentArray, $linkArray); // 结果是:['comment' => '用户评论内容', 'link' => 'https://example.com']
这样link就和comment处于同一层级啦!
内容的提问来源于stack exchange,提问作者pors
相关产品推荐
相关产品推荐

