如何仅从共享键/值对的数组中提取项目?

时间:2018-09-21 14:02:39

标签: php arrays

简单来说,我有一个包含(来自所有客户的)发票的主数组。

我想尝试将其拆分为仅返回来自特定客户的发票数据的新数组。

在主发票阵列中,有一个称为customer_id的键/值对,它获取客户的ID号。

我正在将其传递给正在创建的函数中,以便我可以指定要为其检索发票的客户。

我已经将其组合在一起,但是它总是返回NULL,我不确定为什么。

// Get customer invoices
function get_customer_invoices($customer_id = null) {
    if($customer_id) {
        $output = array_filter(get_invoices(), function ($item) use ($customer_id) {
            if(stripos($item['customer_id'], $customer_id) !== false) {
                return $output;
            }
            return false;
        });
    } else {
        return false;
    }
}

注意:get_invoices()是主要功能,可从API获取所有发票并返回以下内容:

array(88) {
    [0]=> array(32) {
        ["id"]=> int(800481)
        ["customer_id"]=> int(81136)
        // Remaining key/value pairs
    }
}

为什么这返回NULL?还是还不能诊断?

1 个答案:

答案 0 :(得分:1)

您的代码的简化版本是:

function get_customer_invoices($customer_id = null) {
    if ($customer_id) {
        // return result of `array_filter` from `get_customer_invoices` function
        return array_filter(get_invoices(), function ($item) use ($customer_id) {
            // array_filter's callback should return `true` or `false` 
            return (stripos($item['customer_id'], $customer_id) !== false);
        });
    } else {
        return false;
    }
}

更新:由于您的数据样本显示customer_id是int,所以我认为最好比较int而不是字符串。在这种情况下,过滤器功能将是:

return array_filter(get_invoices(), function ($item) use ($customer_id) {
    // array_filter's callback should return `true` or `false` 
    return $item['customer_id'] === $customer_id;
});

提琴here