Reputation: 1510
Lets say I have a multi-dimensional array like this :
$results = array(
0 => array(
'fruit' => 'apple',
'colour' => 'green',
'amount' => 50
),
1 => array(
'fruit' => 'orange',
'colour' => 'orange',
'amount' => 25
),
2 => array(
'fruit' => 'banana',
'colour' => 'yellow',
'amount' => 7
)
);
And I want to create a new multi-dimensional array only using specific objects :
$newarray = array(
0 => array(
'fruit' => 'apple',
'amount' => 50
),
1 => array(
'fruit' => 'orange',
'amount' => 25
),
2 => array(
'fruit' => 'banana',
'amount' => 7
)
);
How would I do this? I've read a few different things and it seems like array_map
or array_column
might be the answer but I haven't found an example that fits my situation.
I've got as far as :
$newarray = array();
foreach ($results as $result) {
if (!empty($result['fruit'])) {
// create new array here but how do I specify the key => values?
}
}
Upvotes: 0
Views: 112
Reputation: 255
Set your keys on "$keys_to_search". Is better than use unset.
$keys_to_search = ['fruit' => '','colour' => ''];
$results = array(
0 => array(
'fruit' => 'apple',
'colour' => 'green',
'amount' => 50
),
1 => array(
'fruit' => 'orange',
'colour' => 'orange',
'amount' => 25
),
2 => array(
'fruit' => 'banana',
'colour' => 'yellow',
'amount' => 7
)
);
foreach($results as $key => $value){
$result[] = array_intersect_key($value, $keys_to_search);
}
print_r($result);
Upvotes: 0
Reputation: 2882
This is suitable if the keys are fixed and you don't have too many of them:
$results = array(
0 => array(
'fruit' => 'apple',
'colour' => 'green',
'amount' => 50
),
1 => array(
'fruit' => 'orange',
'colour' => 'orange',
'amount' => 25
),
2 => array(
'fruit' => 'banana',
'colour' => 'yellow',
'amount' => 7
)
);
$new = array();
foreach($results as $value){
$new[] = array(
'fruit' => $value['fruit'],
'amount' => $value['amount']
);
}
var_dump($new);
Gives:
array (size=3)
0 =>
array (size=2)
'fruit' => string 'apple' (length=5)
'amount' => int 50
1 =>
array (size=2)
'fruit' => string 'orange' (length=6)
'amount' => int 25
2 =>
array (size=2)
'fruit' => string 'banana' (length=6)
'amount' => int 7
Upvotes: 2
Reputation: 1506
in any case this is what you wan't correct?
foreach ($results as $key) {
unset ($results[$key]['colour']);
}
print_r($results);
Output:
Array
(
[0] => Array
(
[fruit] => apple
[amount] => 50
)
[1] => Array
(
[fruit] => orange
[amount] => 25
)
[2] => Array
(
[fruit] => banana
[amount] => 7
)
)
Upvotes: 2