I have a multidimensional array and would like to find an array by specific payment_status: My array below and I would like to return an array by payment_status.
[orders] => Array
(
[0] => Array
(
[total_price] => 995.94
[avg] => 995.940000
[count] => 1
[payment_status] => 1
)
[1] => Array
(
[total_price] => 779.64
[avg] => 779.640000
[count] => 1
[payment_status] => 2
)
[2] => Array
(
[total_price] => 1763.49
[avg] => 1763.490000
[count] => 1
[payment_status] => 3
)
function get_sub_array((int)$payment_status) {
}
How can I do this? Thanks!
$arr = array('orders' => array
(
0 => Array
(
'total_price' => 995.94,
'avg' => 995.940000,
'count' => 1,
'payment_status' => 1
),
1 => Array
(
'total_price' => 779.64,
'avg' => 779.640000,
'count' => 1,
'payment_status' => 2
),
2 => Array
(
'total_price' => 1763.49,
'avg' => 1763.490000,
'count' => 1,
'payment_status' => 3
)
));
function get_sub_array($payment_status,$arr) {
$arrRet = array();
foreach($arr as $key=>$val){
if($val['payment_status'] == $payment_status)
array_push($arrRet,$val);
}
return $arrRet;
}
$arrRes = get_sub_array(1,$arr['orders']);
print_r($arrRes);
This would work I think.
function get_sub_array($arr, $payment_status) {
foreach($arr as $item) {
if($item['payment_status'] === $payment_status) {
return $item;
}
}
}
Assuming you want to retrieve multiple orders with the same status, to return them all you could do:
function get_sub_array($orders, $payment_status) {
$result = array();
foreach ($orders as $order) {
if ($order['payment_status'] == $payment_status) {
array_push($result, $order);
}
}
return $result;
}
You can use array_filter
. For example if you want a sub array containing all values with payment status 3
:
$sub_array = array_filter($arr['orders'],function($val){
return $val['payment_status'] === 3;
});