shi jack
shi jack

Reputation: 37

An array of sorting algorithm

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

Answers (1)

VolkerK
VolkerK

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

Related Questions