按大小写限制数组


Array Limit By Case

是否有某种类型的选择函数来创建一个新数组,仅选择某些元素,子元素与大小写匹配?例如,我只想有一个包含 [type] 是"A"的数组,所以有一个只包含 [1] 和 [2] 的最终数组。

[1]  
    [type] => A
    [month] => January
[2]
    [type] => A
    [month] => February
[3]
    [type] => B
    [month] => March

谢谢!

function is_type_a($element) { return $element['type'] === 'A'; }
$fiteredArray = array_filter($inputArray, 'is_type_a');

如果你有 PHP 5.4,你可以用匿名函数更简洁地做到这一点。

您可以将该数组减少到所需的条目。请记住,这将保留原始键,因此,如果在此过程中未设置 2,则最终可能会得到一个将 0、1 和 3 作为键的数组。

foreach( $array as $key => &$value ){
  if ( $value['type'] != 'A' )
    unset( $array[ $key ] );
}

演示:http://codepad.org/OG5rguJ8

另一种方法是使用 array_filter 迭代地减少数组,一次减少一个条目:

function callbackFunc( $val ) {
    return $val['type'] == 'A';
}
$result = array_filter( $array, callbackFunc );

我们调用传入要过滤的数组的 array_filter 方法,以及我们创建的过滤函数。我们的函数将针对数组中的每个元素运行,将当前元素视为$val变量。

如果该变量的类型键映射到==到"A"的值,则返回TRUE。否则,将返回FALSE。当函数返回TRUE时,计算值被发送到$result数组。如果返回了FALSE,则不会将该值推送到$result数组上。

与上一个选项一样,此方法也将保留键值。

演示:http://codepad.org/todHBZo7

function select_custom($array,$param)
{
    foreach($array as $k=>$v)
    {
       if($v['type']==$param)
       {
          $returnArray[] = $v; 
       }
    }
    return $returnArray;
}

如果你知道要选取的元素的索引,你可以使用 array_splice((,如果不是像前面的答案所建议的那样,你必须循环