genesst
genesst

Reputation: 1431

How do i split an array of elements based on inner value element?

As an input have an associate array like this:

$array[0]['id'] = 0;
$array[0]['name'] = 'first name';
$array[0]['phone'] = '+1 515 111 111';
$array[0]['for_id'] = 1;

$array[1]['id'] = 1;
$array[1]['name'] = 'first name1';
$array[1]['phone'] = '+1 515 222 222';
$array[1]['for_id'] = 1;

$array[2]['id'] = 0;
$array[2]['name'] = 'first name2';
$array[2]['phone'] = '+1 515 333 333';
$array[2]['for_id'] = 1;

$array[3]['id'] = 0;
$array[3]['name'] = 'first name3';
$array[3]['phone'] = '+1 515 444 444';
$array[3]['for_id'] = 2;

$array[4]['id'] = 0;
$array[4]['name'] = 'first name4';
$array[4]['phone'] = '+1 515 555 555';
$array[4]['for_id'] = 2;

$array[5]['id'] = 0;
$array[5]['name'] = 'first name5';
$array[5]['phone'] = '+1 515 666 666';
$array[5]['for_id'] = 2;

How do I split it in N separate arrays based on same value of $array[]['for_id']?

Like $array1 will contain all elements from $array where $array[]['for_id'] == 1; and $array2 with $array[]['for_id'] == 2;?

Upvotes: 0

Views: 65

Answers (2)

Bizmate
Bizmate

Reputation: 1872

here is a similar way to Philipps' but doing exactly what you want, i.e. getting the name of the variable to match the for_id key value

$array[0]['id'] = 0;
$array[0]['name'] = 'first name';
$array[0]['phone'] = '+1 515 111 111';
$array[0]['for_id'] = 1;

$array[1]['id'] = 1;
$array[1]['name'] = 'first name1';
$array[1]['phone'] = '+1 515 222 222';
$array[1]['for_id'] = 1;

$array[2]['id'] = 0;
$array[2]['name'] = 'first name2';
$array[2]['phone'] = '+1 515 333 333';
$array[2]['for_id'] = 1;

$array[3]['id'] = 0;
$array[3]['name'] = 'first name3';
$array[3]['phone'] = '+1 515 444 444';
$array[3]['for_id'] = 2;

$array[4]['id'] = 0;
$array[4]['name'] = 'first name4';
$array[4]['phone'] = '+1 515 555 555';
$array[4]['for_id'] = 2;

$array[5]['id'] = 0;
$array[5]['name'] = 'first name5';
$array[5]['phone'] = '+1 515 666 666';
$array[5]['for_id'] = 2;



foreach($array as $arr){
    $int = $arr['for_id'];
    $arrName  = 'array' . $int;

    if(!isset($$arrName ))
    {
        $$arrName =array();
    }
    array_push($$arrName, $arr);

}

echo 'First array ' . json_encode($array1);
echo 'Second array ' . json_encode($array2);

Upvotes: 1

Philipp
Philipp

Reputation: 15629

Just iterate over the array and collect every item with the same for_id in a new array.

$t = array();
foreach ($array as $item) {
    if (!isset($t[$item['for_id']]) {
        $t[$item['for_id']] = array();
    }

    $t[$item['for_id']][] = $item;
}

Upvotes: 1

Related Questions