Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.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中使用If对数组排序_Php_Arrays_Sorting - Fatal编程技术网

如何在PHP中使用If对数组排序

如何在PHP中使用If对数组排序,php,arrays,sorting,Php,Arrays,Sorting,我有以下数组,其中包含诸如卡、月和年之类的数据。然而,我以一种杂乱无章的方式接受它,我希望按照这种模式对待这些价值观。没有卡,年和月或月,卡和年。我尝试使用php的sort()函数,但没有成功 Array ( [0] => Array ( [0] =&g

我有以下
数组
,其中包含诸如卡、月和年之类的数据。然而,我以一种杂乱无章的方式接受它,我希望按照这种模式对待这些价值观。没有卡,年和月或月,卡和年。我尝试使用php的
sort()
函数,但没有成功

Array                                                                                                                    (
[0] => Array 
(
    [0] => 5522 8600 0000 0000
    [1] => 2020
    [2] => 09
)

[1] => Array 
(
    [0] => 09
    [1] => 5522 8600 0000 0000
    [2] => 2020
)

[2] => Array 
(
    [0] => 5522 8600 0000 0000
    [1] => 20
    [2] => 9
)                                                                                                    
)
我想创建一个函数,其中数组的组织如下:

 Array                                                                                                                   (
    [0] => Array 
    (
        [0] => 5522 8600 0000 0000
        [1] => 09
        [2] => 2020
    )

    [1] => Array 
    (
        [0] => 5522 8600 0000 0000
        [1] => 09
        [2] => 2020
    )

    [2] => Array 
    (
        [0] => 5522 8600 0000 0000
        [1] => 9
        [2] => 20
    )
)
然后是条件点,如果作为
数组
2020年的定义只有2位小数位,即20(19,20,21,22,23,…),我会检查该值是否不大于12,根据我们在一年中的月数,知道这一点,以确定该
数组中的年份
,我将应用另一个验证来检查值是否大于12,是否有2或4位数字,但我无法以任何方式应用它


提前非常感谢

我们可以通过比较数组中的值的数量来实现这一点,然后通过遍历数组中的循环来为它们分配索引位置

但有一个问题

[0] => Array 
(
    [0] => 5522 8600 0000 0000
    [1] => 20
    [2] => 20
)     

根据你的设想,在某一点上,你将2020年显示为20年。所以这也可能是一个日期,正如我提到的上面的数组。因此,通过使用这种方法,每个逻辑都会失败。

我们可以通过比较数组中的值的数量,然后通过数组中的循环为它们分配索引位置来实现这一点

但有一个问题

[0] => Array 
(
    [0] => 5522 8600 0000 0000
    [1] => 20
    [2] => 20
)     

根据你的设想,在某一点上,你将2020年显示为20年。所以这也可能是一个日期,正如我提到的上面的数组。因此,通过使用此方法,每个逻辑都将失败。

根据您的评论,您可以使用此解决方案:

$finalArray = [];
foreach($array as $key=>$arr){
    $arry = [];
    foreach($arr as $ar){
        
        if(strlen($ar) > 4){
            $arry[0] = $ar;
        }else if((strlen($ar) ==1 || strlen($ar) == 2) && (int)$ar <=12){
            $arry[1] = $ar;
        }else{
            $arry[2] = $ar;
        }
    }
    ksort($arry);
    $finalArray[$key] = $arry;
}

print_r($finalArray);
$finalArray=[];
foreach($key=>$arr的数组){
$arry=[];
外汇($arr作为$ar){
如果(斯特伦($ar)>4){
$arry[0]=$ar;

}如果((strlen($ar)==1 | | strlen($ar)==2)&(int)$ar根据您的评论,您可以使用此解决方案:

$finalArray = [];
foreach($array as $key=>$arr){
    $arry = [];
    foreach($arr as $ar){
        
        if(strlen($ar) > 4){
            $arry[0] = $ar;
        }else if((strlen($ar) ==1 || strlen($ar) == 2) && (int)$ar <=12){
            $arry[1] = $ar;
        }else{
            $arry[2] = $ar;
        }
    }
    ksort($arry);
    $finalArray[$key] = $arry;
}

print_r($finalArray);
$finalArray=[];
foreach($key=>$arr的数组){
$arry=[];
外汇($arr作为$ar){
如果(斯特伦($ar)>4){
$arry[0]=$ar;


}如果((strlen($ar)==1 | | strlen($ar)==2)和&(int)$ar最好将这些值存储为对象。然后将这些对象存储在数组或列表中。这样,你就不必担心对象中的数据索引。你能详细说明没有卡片、年月、卡片和年份吗?在我看来,只是卡片、月份和年份。@Loki我怎么能在php中这样做?@nice_dev我不想这样做o组织数组,因为组织之后,我会将其转换为JSON。PHP实际上不是我的领域,但我发现这些链接可能会帮助您:最好将这些值存储为对象。然后将这些对象存储在数组或列表中。这样,您就不必担心对象内的数据索引。您能否详细说明否卡,年和月还是月,卡和年?在我看来,它只是卡,月和年。@Loki我怎么能用php这样做?@nice_dev我想组织数组,因为在组织它之后,我会将它转换成JSON。php不是我真正的领域,但我发现这些链接可能会帮助你:很好,因为它是有效的09个月(九月)遵循该模式,这将是12个月,高于2个或4个数字的值,我可以认为是一年,已经是我可以创建一个验证值的第一个月,并检查它是否以0或1开始(使用两个小数点)。如果该值不大于12,这就是为什么使用if,但我无法以任何方式应用它,因为它涉及有效性,即月份和年份,关键是指月份:09(9月)遵循这个模式,它将是12个月,高于2个或4个数字的值,我可以把它看作是一年,已经是一个月,我可以创建一个验证,验证该值的第一个数字,并检查它是否以0或1开始(使用两个小数点)。如果该值不大于12,这就是为什么使用if,但我无法以任何方式应用该值,那么具有11个月和11年的卡呢?在这种情况下,您的代码将失败。它不会因为收到的API而失败,仅从2015年起,因此没有失败的风险,因为这是一种验证贷记/借记card@JohnDoe首先我已经说过,这好像是不可能做到的,但在阅读了OP的所有评论后,我想出了这个解决方案。现在OP有责任检查它,如果失败了,那么让我知道。嗯,好吧。幸运的是,卡有11个月和11年?你的代码在这种情况下会失败。它会l不会因为其收到的API而失败,仅从2015年起,因此没有失败的风险,因为这是对信用/借记的验证card@JohnDoe我已经说过,首先,这是不可能做到的,但在阅读了OP的所有评论后,我提出了这个解决方案。现在OP的职责是检查它,以防失败嗯,让我知道。嗯,好的。祝你好运