drwu24647 2014-11-20 15:48
浏览 94

PHP数组:带参数的数组过滤器

I have this simple array in PHP that I need to filter based on an array of tags matching those in the array.

Array
(
    [0] => stdClass Object
        (
            [name] => Introduction
            [id] => 798162f0-d779-46b6-96cb-ede246bf4f3f
            [tags] => Array
                (
                    [0] => client corp
                    [1] => version 2
                )
        )

    [1] => stdClass Object
        (
            [name] => Chapter one
            [id] => 761e1909-34b3-4733-aab6-ebef26d3fcb9
            [tags] => Array
                (
                    [0] => pro feature
                )
        )
)

When supplied with 'client corp', the output should be the above array with only the first item.

So far I have this:

$selectedTree = array_filter($tree,"checkForTags");

function checkForTags($var){

   $arr = $var->tags;
   $test = in_array("client corp", $arr, true);

   return ($test);
}

However, the result is that it's not filtering. When I echo $test, I get 1 all the time. What am I doing wrong?

  • 写回答

2条回答 默认 最新

  • donglong7338 2014-11-20 15:55
    关注

    Something like this should do the trick:

    $selectedTree = array_filter(array_map("checkForTags", $tree ,array_fill(0, count($tree), 'client corp')));
    
    function checkForTags($var, $exclude){
       $arr = $var->tags;
       $test = in_array($exclude, $arr, true);
       return ($test ? $var : false);
    }
    

    array_map() makes sure you can pass arguments to the array. It returns each value altered. So in the returning array, some values are present, others are set to false. array_filter() with no callback filters all falsey values from that array and you are left with the desired result

    评论

报告相同问题?

悬赏问题

  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教