通过选择性地取消设置值来过滤数组


Filter array of arrays by selectively unsetting values

好的,所以我有:一个数组(a)的数组(b)的阵列(c)。

我正在尝试迭代该数组和取消设置(或者准确地说,删除)级别为'c'的所有数组,其中项目少于3个。

你会怎么做?

我已经尝试了unset的各种可能的用法,但我仍然不能得到我需要的结果。

foreach ($data as $a=>&$data_section)
{
    foreach ((array)$data_section as $b=>$pattern)
    {
        if (count((array)$pattern)<3) { unset($data_section[$b]); }
    }
}

这个给出了一个错误:

致命错误:无法取消设置字符串偏移

为什么不直接使用array_filter呢。

php 5.3+语法

$data = array_filter($data, function($a){ return count($a) >2; });

php 5.3之前的

function countGreaterThanTwo($a){ return count($a) >2; };
$data = array_filter($data, "countGreaterThanTwo");

所以在你上面的例子中,你会做

foreach ($data as $a=>&$data_section)
{
    foreach ($data_section as $b=>&$pattern)
    {
        $pattern = array_filter($pattern, function($a){ return count($a) >2; });
    }
}