在多维数组中查找子数组

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; 
});