是否有某种类型的选择函数来创建一个新数组,只选择子元素匹配情况的某些元素?例如,我只想要一个包含[type]为“A”的数组,所以最后一个数组只包含[1]和[2]。
[1]
[type] => A
[month] => January
[2]
[type] => A
[month] => February
[3]
[type] => B
[month] => March
谢谢!
答案 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
数组。
与上一个选项一样,此方法也会保留键值。
答案 2 :(得分:0)
function select_custom($array,$param)
{
foreach($array as $k=>$v)
{
if($v['type']==$param)
{
$returnArray[] = $v;
}
}
return $returnArray;
}
答案 3 :(得分:0)
如果您知道要选择的元素的索引,则可以使用array_splice(),如果不是之前的答案建议,则必须循环