繁体   English   中英

过滤多维数组-filter_array(PHP)

[英]Filter a multidimensional array - filter_array (PHP)

如何基于[channel]使用array_filter()过滤此多维数组?

Array
(
    [0] => Array
        (
            [268a9d2d25fc2b9765c7cd7b8a768d3e] => Array
                (
                    [dj_name] => Emilian
                    [show_name] => TechnoShow
                    [channel] => techno
                    [show_image] => http://www.digitalark.ro/dieselfm/wp-content/uploads/2016/01/avatar.jpg
                    [time] => 0
                    [time_end] => 1
                    [sun1] => 1
                    [sun2] => 1
                    [sun3] => 1
                    [sun4] => 1
                    [sun5] => 1
                )

        )

    [1] => Array
        (
            [e13268de7c56db42f8aeab2ab4c607f2] => Array
                (
                    [dj_name] => John Doe
                    [show_name] => John Doe`s Trance Show
                    [channel] => trance
                    [show_image] => http://www.digitalark.ro/dieselfm/wp-content/uploads/2016/01/dummy.jpg
                    [time] => 11
                    [time_end] => 11
                    [mon1] => 1
                    [mon2] => 1
                    [tue2] => 1
                    [mon3] => 1
                    [fri3] => 1
                    [mon4] => 1
                    [mon5] => 1
                )

        )

)

结果应仅包含值为“ techno”的数组,例如:

Array
(
    [0] => Array
        (
            [268a9d2d25fc2b9765c7cd7b8a768d3e] => Array
                (
                    [dj_name] => Emilian
                    [show_name] => TechnoShow
                    [channel] => techno
                    [show_image] => http://www.digitalark.ro/dieselfm/wp-content/uploads/2016/01/avatar.jpg
                    [time] => 0
                    [time_end] => 1
                    [sun1] => 1
                    [sun2] => 1
                    [sun3] => 1
                    [sun4] => 1
                    [sun5] => 1
                )

        ))

我试过使用:

$data = array_filter($dataraw, function($fs) use ($genre) {return $fs['channel'] == $genre});

编辑:

$djs = get_posts($args);
foreach ($djs as $dj) {
    $temp = maybe_unserialize(get_post_meta($dj->ID, 'show_data',true));
    if ($temp) $show_data[] = maybe_unserialize(get_post_meta($dj->ID, 'show_data',true));
}


$datax = array_filter($show_data, function($fs) use ($genre) {
 return array_values($fs)[0]['channel'] == $genre;
});

print_r($datax);

我假设您代码中的解析错误是复制/粘贴错误。 问题在于传递到函数中的元素是一个更深的数组。 尝试:

return current($fs)['channel'] === $genre;

另外,您可能希望使用===以使结果符合预期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM