【问题标题】:Filter 2D array by value of a particular key [duplicate]按特定键的值过滤二维数组[重复]
【发布时间】:2010-12-08 07:46:24
【问题描述】:

如何过滤此数组以仅保留带有 [category] => 1 的项目?

[0] => Array
    (
        [link] => index
        [image] => spot
        [category] => 0
    )

[1] => Array
    (
        [link] => test
        [image] => spotless
        [category] => 0
    )

[2] => Array
    (
        [link] => differentcat
        [image] => spotly
        [category] => 1
    )

【问题讨论】:

    标签: php arrays filter


    【解决方案1】:

    使用array_filter

    您想要这样的东西(假设您想保留带有category 1 的条目):

    function categoryone($var)
    {
        return (is_array($var) && $var['category'] == 1);
    }
    
    print_r(array_filter($your_array, "categoryone"));
    

    【讨论】:

    • 我有一个问题,如何将数字(在本例中为 1)设置为变量?我想在 for 循环中应用这个函数,其中 1 发生变化,它并不总是 1。我的意思是,$var['category']==$number);那么我如何用参数调用这个函数呢?否则,我会收到警告 array_filter() 期望参数 2 是有效的回调
    【解决方案2】:

    您可以使用array_filter 在回调中检查类别值。 http://php.net/manual/en/function.array-filter.php

    【讨论】:

      【解决方案3】:

      像这样定义一个过滤器函数:

      function filter_function($var) {
          return is_array($var) && $var['category'] == 1;
      }
      

      ... 然后使用 array_filter() 将此函数应用于您的数组:

      $filtered_array = array_filter($my_array, 'filter_function');
      

      编辑:更改过滤功能以保持匹配值而不是丢弃它们。

      【讨论】:

        【解决方案4】:

        @pathros:

        要使用不同的值进行过滤,解决方案如下:(TESTED :-))

        //Define your array
        $my_array = array(
          0 =>   array(
            'cat' =>         '1',
            'value' =>         'Value A'
            )
          ,
          1 =>   array(
            'cat' =>         '2',
            'value' =>         'Value B'
            )
          ,
          2 =>   array(
            'cat' =>         '0',
            'value' =>         'Value C'
            )
          ,
          3 =>   array(
            'cat' =>         '1',
            'value' =>         'Value D'
            )
          );
        
        //Define your filtering function
        function my_filtering_function($in_array) {
            return is_array($in_array) && $in_array['cat'] == $GLOBALS['filter_param_1'];
        }
        
        //TEST #1 : Set the desired value to 2
        $GLOBALS['filter_param_1'] = 2;
        //Filter your array to only return items that match "cat=2"
        $filtered_array = array_filter($my_array, 'my_filtering_function');
        e('Number of matching records : '.count($filtered_array)).'record(s)<br>'; //Will return "1 record(s)" (the second record of your array)
        
        //TEST #2 : Set the desired value to 1
        $GLOBALS['filter_param_1'] = 1;
        //Filter your array to only return items that match "cat=1"
        $filtered_array = array_filter($my_array, 'my_filtering_function');
        e('Number of matching records : '.count($filtered_array)).'record(s)<br>'; //Will return "2 record(s)" (the first and the last of your array)
        

        【讨论】:

          猜你喜欢
          • 2011-11-12
          • 2015-02-11
          • 2016-12-22
          • 2019-01-12
          • 2021-03-07
          • 2022-07-12
          • 2012-09-23
          • 2022-12-18
          • 1970-01-01
          相关资源
          最近更新 更多