Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组大小写限制_Php_Arrays_Function_Sorting_Element - Fatal编程技术网

Php 数组大小写限制

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

是否有某种类型的排序选择函数来创建一个新数组,只选择子元素匹配大小写的某些元素?例如,我只希望有一个包含[type]为“A”的数组,所以最后一个数组只包含[1]和[2]

[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 );