Reputation: 1431
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
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
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