#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));