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

如何按键合并嵌套数组?PHP/jQuery最优实现方法咨询

解决方案:合并分散的子数组字段

看起来你是想把分散在单独子数组里的同条目字段合并到一起对吧?我来给你分享PHP和jQuery两种场景下的最佳实现方式:

PHP 实现方法

核心思路是:先把原数组按字段类型拆分,再通过索引对应合并成完整的条目数组。假设你的原数组完整结构是每个条目对应一组val、expenses、social_id(数量一致),代码如下:

// 你的原始数组
$originalArray = [
    ['val' => 'facebook'],
    ['val' => 'snapchat'],
    ['val' => 'instagram'],
    ['expenses' => 986532],
    ['expenses' => 45456],
    ['expenses' => 56230],
    ['social_id' => 15],
    ['social_id' => 16],
    ['social_id' => 17]
];

// 1. 按字段拆分数组
$vals = array_filter($originalArray, fn($item) => isset($item['val']));
$expenses = array_filter($originalArray, fn($item) => isset($item['expenses']));
$socialIds = array_filter($originalArray, fn($item) => isset($item['social_id']));

// 2. 重置索引,确保从0开始(array_filter会保留原索引,这里必须重置)
$vals = array_values($vals);
$expenses = array_values($expenses);
$socialIds = array_values($socialIds);

// 3. 合并成目标数组
$targetArray = [];
$itemCount = count($vals); // 假设所有字段组的数量一致
for ($i = 0; $i < $itemCount; $i++) {
    $targetArray[] = array_merge(
        $vals[$i],
        $expenses[$i] ?? [], // 用??处理可能的缺失字段,避免报错
        $socialIds[$i] ?? []
    );
}

// 输出结果
print_r($targetArray);

执行后你会得到整理好的数组:

Array
(
    [0] => Array
        (
            [val] => facebook
            [expenses] => 986532
            [social_id] => 15
        )

    [1] => Array
        (
            [val] => snapchat
            [expenses] => 45456
            [social_id] => 16
        )

    [2] => Array
        (
            [val] => instagram
            [expenses] => 56230
            [social_id] => 17
        )

)

jQuery(JavaScript)实现方法

思路和PHP一致,用JavaScript的数组方法来处理:

// 你的原始数组
const originalArray = [
    { val: 'facebook' },
    { val: 'snapchat' },
    { val: 'instagram' },
    { expenses: 986532 },
    { expenses: 45456 },
    { expenses: 56230 },
    { social_id: 15 },
    { social_id: 16 },
    { social_id: 17 }
];

// 1. 按字段拆分数组
const vals = originalArray.filter(item => 'val' in item);
const expenses = originalArray.filter(item => 'expenses' in item);
const socialIds = originalArray.filter(item => 'social_id' in item);

// 2. 合并成目标数组
const targetArray = vals.map((valItem, index) => ({
    ...valItem,
    ...expenses[index],
    ...(socialIds[index] || {}) // 处理可能的缺失字段
}));

// 输出结果
console.log(targetArray);

控制台会输出:

[
  { val: 'facebook', expenses: 986532, social_id: 15 },
  { val: 'snapchat', expenses: 45456, social_id: 16 },
  { val: 'instagram', expenses: 56230, social_id: 17 }
]

额外说明

如果你的字段数量不一致(比如有的条目没有social_id),上面的代码也能兼容,不会抛出错误。如果原数组的字段顺序不是严格按组排列的,那你可能需要额外的标识来匹配条目,但从你给出的示例来看,按索引对应是最直接高效的方式。

内容的提问来源于stack exchange,提问作者sayyed tabrez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:45:14