Reputation: 37
I have a multi-dimensional array, the structure is like this:
$arr1 = array(
0 => array(
'name' => 'Jim',
'awards' => array(
0 => 'awards one',
1 => 'awards two',
2 => 'awards three',
3 => 'awards four',
4 => 'awards five',
5 => 'awards six',
),
),
1 => array(
'name' => 'Kate',
'awards' => array(
0 => 'awards one',
1 => 'awards two',
2 => 'awards three',
),
));
If one of the element's count of 'awards' greater than 4, it will being a new element and contain 'awards' element after the fifth. like this:
$arr2 = array(
0 => array(
'name' => 'Jim',
'awards' => array(
0 => 'awards one',
1 => 'awards two',
2 => 'awards three',
3 => 'awards four',
),
),
1 => array(
'name' => 'Jim',
'awards' => array(
0 => 'awards five',
1 => 'awards six',
),
),
2 => array(
'name' => 'Kate',
'awards' => array(
0 => 'awards one',
1 => 'awards two',
2 => 'awards three',
),
));
I'm not good at algorithm. I looked for everywhere but I couldn't find the solution. can someone help me. Thanks in advance!
Upvotes: 0
Views: 38
Reputation: 96169
<?php
$arr1 = array(
array(
'name' => 'Jim',
'awards' => array(
0 => 'awards one',
1 => 'awards two',
2 => 'awards three',
3 => 'awards four',
4 => 'awards five',
5 => 'awards six',
),
),
array(
'name' => 'Kate',
'awards' => array(
0 => 'awards one',
1 => 'awards two',
2 => 'awards three',
),
));
$result = array();
foreach( $arr1 as $player ) {
while ( count($player['awards']) > 0 ) {
$result[] = array(
'name' => $player['name'],
'awards' => array_splice($player['awards'], 0, 4)
);
}
}
var_export($result);
prints
array (
0 =>
array (
'name' => 'Jim',
'awards' =>
array (
0 => 'awards one',
1 => 'awards two',
2 => 'awards three',
3 => 'awards four',
),
),
1 =>
array (
'name' => 'Jim',
'awards' =>
array (
0 => 'awards five',
1 => 'awards six',
),
),
2 =>
array (
'name' => 'Kate',
'awards' =>
array (
0 => 'awards one',
1 => 'awards two',
2 => 'awards three',
),
),
)
Upvotes: 1