数组极限情况

时间:2012-05-03 16:54:22

标签: php arrays function sorting element

是否有某种类型的选择函数来创建一个新数组,只选择子元素匹配情况的某些元素?例如,我只想要一个包含[type]为“A”的数组,所以最后一个数组只包含[1]和[2]。

[1]  
    [type] => A
    [month] => January

[2]
    [type] => A
    [month] => February

[3]
    [type] => B
    [month] => March

谢谢!

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您可以将该数组缩减为所需的条目。请记住,这将保留原始键,因此,如果在此过程中未设置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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果您知道要选择的元素的索引,则可以使用array_splice(),如果不是之前的答案建议,则必须循环