【问题标题】:Split array into equal parts order by id using PHP使用PHP按ID将数组拆分为相等的部分
【发布时间】:2025-12-27 16:50:12
【问题描述】:

我有一个如下的数组列表,如何将它们分成相等的部分,按 id 对相等的部分进行排序,以及使用 PHP 将相等的部分合并到一个 id 中?

Array
(
    [0] => Array
        (
            [id] => 121
            [owner] => xa
            [name] => xjs
        )

    [1] => Array
        (
            [id] => 139
            [owner] => xa
            [name] => xjs
        )

    [2] => Array
        (
            [id] => 1456
            [owner] => xv
            [name] => bjs
        )
    [3] => Array
        (
            [id] => 1896
            [owner] => xb
            [name] => bjs
        )
    [4] => Array
        (
            [id] => 1963
            [owner] => xb
            [name] => bjs
        )

)

假设我想将它们分成 2 个相等的项目, 先拆分,最小的id应该是等分的,应该是这样的:

Array
(
    [0] => Array
        (
            [id] => 121
            [owner] => xa
            [name] => xjs
        )

    [1] => Array
        (
            [id] => 139
            [owner] => xa
            [name] => xjs
        )
)
Array
(
    [0] => Array
        (
            [id] => 1456
            [owner] => xv
            [name] => bjs
        )
    [1] => Array
        (
            [id] => 1896
            [owner] => xb
            [name] => bjs
        )
)


Array
(
    [0] => Array
        (
            [id] => 1963
            [owner] => xb
            [name] => bjs
        )
)

我的示例代码是 5 项,如果是 6 项,应该是 [1,2],[3,4],[5,6],有多少项或部分不确定,但我应该是 2相等的部分。

其次合并它们(这是我们项目的逻辑,如果你不知道我在说什么,请忽略合并问题,我只需要知道如何拆分它们):

[121, 139] => 合并到139, [1456, 1896] => 合并到1896, 新列表:[139, 1896] => 合并到1896, 和最终列表 [1896, 1963] 合并到最终 id 1963

【问题讨论】:

  • 如果您可以为此输入添加预期的输出,它将更容易理解您的要求。
  • 只分割数组,使用array_chunk
  • @Nick 嗨,我更新了我的问题。
  • 如果数组是排序好的,那么array_chunk会按照你想要的方式拆分。

标签: php arrays split array-merge


【解决方案1】:

听起来你想要这样的东西:

$array = [
    [
        'id' => 121,
        'owner' => 'xa',
        'name' => 'xjs',
    ],
    [
        'id' => 139,
        'owner' => 'xa',
        'name' => 'xjs',
    ],
    [
        'id' => 1456,
        'owner' => 'xv',
        'name' => 'bjs',
    ],
    [
        'id' => 1896,
        'owner' => 'xb',
        'name' => 'bjs',
    ],
    [
        'id' => 1963,
        'owner' => 'xb',
        'name' => 'bjs',
    ]
];

// custom function to compare which ID is greater
function customCompare($a, $b)
{
    if ($a['id'] === $b['id']) {
        return 0;
    }
    
    return ($a['id'] < $b['id']) ? -1 : 1;
}

// sort the whole array
usort($array, "customCompare");

// print the whole array as pairs,
// if there is an unpair number
// the last one will be a single member
print_r(array_chunk($array, 2));

【讨论】: