Разделить массив на равные части в порядке по идентификатору с помощью PHP

#php #arrays #split #array-merge

#php #массивы #разделить #массив-слияние

Вопрос:

У меня есть список массивов, как показано ниже, как разделить их на равные части, отсортировать равные части по идентификатору и объединить равные части в id с помощью PHP?

 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 равных элемента,
Сначала разделите их, и наименьший идентификатор должен быть в равной части, сначала они должны быть такими:

 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] объединить в окончательный идентификатор 1963

Комментарии:

1. Если бы вы могли добавить ожидаемый результат для этого ввода, это облегчило бы понимание ваших требований.

2. Чтобы просто разделить массив, используйте array_chunk

3. @Nick привет, я обновил свой вопрос.

4. Если массив отсортирован, то array_chunk он разделится так, как вы хотите.

Ответ №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));