【问题标题】:php multidimensional array get prices in specific category [duplicate]php多维数组获取特定类别的价格[重复]
【发布时间】:2020-01-08 07:24:05
【问题描述】:
[0] => Array
    (
        [id] => 004002718
        [price] => 5.00
        [category] => x
    )

[1] => Array
    (
        [id] => 030285882
        [price] => 8.99
        [category] => y

    )

[2] => Array
    (
        [id] => 040685111
        [price] => 19.99
        [category] => x

    )

如何获取特定类别中所有商品的价格?例如,对于类别值“x”,我希望返回 [5.00, 19,99]。

这样我可以轻松提取每个类别的最高、最低和平均价格(这是我的目标)

我尝试过使用 array_column、array_keys 和 array_filter,但无法使用这些函数使其工作

我看到这个问题被标记为重复,但“重复”只是指循环数组。基于这个线程中答案的有用性,我相信这个例子也可以帮助其他人。具体来说,我了解了'function'和'use'与array_filter结合使用

【问题讨论】:

  • 您说您尝试过使用各种array_ 方法,请将此添加到问题中。
  • array_columnarray_filter 结合使用非常适合您的任务。
  • 按类别分组:3v4l.org/ZK4bm
  • $prices = array_column(array_filter($array,function($i){return $['category'] == 'x';}),'price');

标签: php multidimensional-array array-filter array-column array-combine


【解决方案1】:

您可以使用foreach 来获取它,

    $prices = [];
    $category = "x";
    foreach($arrays as $array){
        if($array["category"] == $category){
            $prices[] = $array["price"];
        }
    }
    var_dump($prices);

【讨论】:

  • 谢谢克里斯,这也有效,但因为我试图用 array_filter/array_column 解决这个问题,所以我接受了另一个答案
【解决方案2】:

您可以尝试使用array_filter()array_column()

  • 使用array_filter()过滤特定类别的数组
  • 使用array_column() 只需将价格列作为数组获取。

示例代码:

$filter_category = 'x';
$filtered_data = array_filter($array, function($item) use ($filter_category) { return $item['category'] === $filter_category; });
$filtered_data = array_column($filtered_data, 'price');

您也可以尝试使用array_reduce()

示例代码:

$filter_category = 'x';
$filtered_data = array_reduce($arr, function($old, $new) use ($filter_category) {
    if ($new['category'] === $filter_category) {
        $old[] = $new['price'];
    }
    return $old;
}, []);

【讨论】:

  • 我不喜欢您的 array_reduce() 示例中的第三行,使用 if... 有什么问题,恕我直言,if 更加标准和清晰。
  • @NigelRen 我同意你的看法,但为了缩短它经常我在我的代码中这样做。
  • 如果要在更短和更清晰之间做出选择 - 我会始终坚持更清晰,毕竟你的所有代码可能已经存在了一段时间,并不是每个人都理解其中一些快捷方式的工作原理。
  • 是的!你说的对。我把它弄干净了。谢谢极客:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 2014-03-23
  • 2017-11-16
  • 2017-01-06
  • 2018-07-22
  • 2019-09-03
相关资源
最近更新 更多