Reputation:
I have an uploads
array that looks like this:
$uploads[0] = array('type' => 'upload', 'label' => 'blah');
$uploads[1] = array('type' => 'upload', 'label' => 'blah');
$uploads[2] = array('type' => 'upload', 'label' => 'blah');
$uploads[3] = array('type' => 'upload', 'label' => 'foobar');
I want to create this array:
$upload_fields = array(
'blah' => array(
array('type' => 'upload', 'label' => 'blah')
array('type' => 'upload', 'label' => 'blah')
array('type' => 'upload', 'label' => 'blah')
),
'foobar' => array(
array('type' => 'upload', 'label' => 'foobar')
)
);
Basically I want to group the arrays based on their labels. The arrays to be grouped are dynamic otherwise I could do something like:
$array_group_1 = array();
$array_group_2 = array();
foreach($uploads as $upload) {
if($upload['label'] == 'blah') {
array_push($array_group_1, $upload);
} else {
array_push($array_group_2, $upload);
}
}
$upload_fields = array(
'blah' => $array_group_1,
'foobar' => $array_group_2
);
But since the keys are dynamic how can I achieve this?
Upvotes: 2
Views: 78
Reputation: 2566
There are alot of exotic array functions you can use to get dynamic array keys and values http://www.php.net/manual/en/ref.array.php
The following code can be optimized by condensing that if else
statement, but I left it like this to make the example very clear
$uploads[0] = array('type' => 'upload', 'label' => 'blah');
$uploads[1] = array('type' => 'upload', 'label' => 'blah');
$uploads[2] = array('type' => 'upload', 'label' => 'blah');
$uploads[3] = array('type' => 'upload', 'label' => 'foobar');
$result = array();
foreach($uploads AS $upload)
{
if(array_key_exists($upload['label'], $result))
{
array_push($result[$upload['label']], $upload);
}
else
{
$result[$upload['label']] = array();
array_push($result[$upload['label']], $upload);
}
}
var_dump($result);
Upvotes: 1
Reputation: 2095
$temp = array();
$final_array = array();
foreach($uploads as $upload){
if(!in_array($upload['label'], $temp)){
$final_array[$upload['label']] = array('type' => upload['type'], 'label' => $temp);
$temp[] = $upload['label'];
}
}
var_dump($final_array);
Upvotes: 0
Reputation: 16828
This is what I came up with:
$uploads[0] = array('type' => 'upload', 'label' => 'blah');
$uploads[1] = array('type' => 'upload', 'label' => 'blah');
$uploads[2] = array('type' => 'upload', 'label' => 'blah');
$uploads[3] = array('type' => 'upload', 'label' => 'foobar');
foreach($uploads as $u){
$upload_fields[$u['label']][] = $u;
}
echo '<pre>',print_r($upload_fields),'</pre>';
Upvotes: 2