Php 数组大小写限制
是否有某种类型的排序选择函数来创建一个新数组,只选择子元素匹配大小写的某些元素?例如,我只希望有一个包含[type]为“A”的数组,所以最后一个数组只包含[1]和[2]Php 数组大小写限制,php,arrays,function,sorting,element,Php,Arrays,Function,Sorting,Element,是否有某种类型的排序选择函数来创建一个新数组,只选择子元素匹配大小写的某些元素?例如,我只希望有一个包含[type]为“A”的数组,所以最后一个数组只包含[1]和[2] [1] [type] => A [month] => January [2] [type] => A [month] => February [3] [type] => B [month] => March 谢谢 function se
[1]
[type] => A
[month] => January
[2]
[type] => A
[month] => February
[3]
[type] => B
[month] => March
谢谢
function select_custom($array,$param)
{
foreach($array as $k=>$v)
{
if($v['type']==$param)
{
$returnArray[] = $v;
}
}
return $returnArray;
}
如果您使用的是PHP5.4,那么使用匿名函数可以更简洁地实现这一点。您可以将该数组简化为所需的条目。请记住,这将保留原始密钥,因此,如果在过程中未设置2,则可能会得到一个包含0、1和3作为密钥的数组
foreach( $array as $key => &$value ){
if ( $value['type'] != 'A' )
unset( $array[ $key ] );
}
演示:
另一种方法是使用array\u filter
一次迭代减少一个数组条目:
function callbackFunc( $val ) {
return $val['type'] == 'A';
}
$result = array_filter( $array, callbackFunc );
我们调用array\u filter
方法传递我们想要过滤的数组,以及我们创建的过滤函数。我们的函数将针对数组中的每个元素运行,将当前元素视为$val
变量
如果该变量的类型键映射到的值是=
到“a”,则返回TRUE
。否则,将返回FALSE
。当函数返回TRUE
时,计算值将发送到$result
数组。如果返回了FALSE
,则不会将该值推送到$result
数组中
与前面的选项一样,此方法也将保留键值
演示:如果您知道要选择的元素的索引,则可以使用array_splice(),如果与前面的答案不同,则必须循环查看,我没有测试。应该是FastU是否为函数指定了第二个参数此函数中的$element是什么?$element['type']不是暗示$element与$inputArray相同吗?如果$element==$inputArray,则$element[0]将是不一样的。数组\过滤器将输入数组中的每个顶级元素传递给回调函数(是\类型\ a)。因此,它将通过$inputArray[0],$inputArray[1]…等等/好吧,它可以工作-我想我只是在$element是什么上绊倒了。。。无论哪种方式,它都可以工作,手册的链接也很有帮助:P
array\u filter
循环通过大数组调用is\u type\u a()
。给定数组,第一个元素位于索引1处,因此它首先调用的是\u type\u a($inputArray[1])
。在中是
,$element
将与$inputArray[1]
相同,它将是数组([type]=>a,[month]=>一月)
。第二个调用,$element
将是$inputArray[2]
。等等。谢谢你的解释!非常感谢!太棒了,它工作了!你认为这是一种有效的方法吗?我有一个庞大的阵列,我需要缩小-不知道这将需要多少时间相对于其他东西@KevinMurphy说实话,有很多方法可以做到这一点。我不知道你的项目需要什么,所以我不能说哪种方法最适合你
function callbackFunc( $val ) {
return $val['type'] == 'A';
}
$result = array_filter( $array, callbackFunc );