【问题标题】:How to sort an Array using If in PHP如何在 PHP 中使用 If 对数组进行排序
【发布时间】:2021-05-07 08:17:56
【问题描述】:

我有以下Array,其中包含以下数据:卡片、月份和年份。但是,我以一种杂乱无章的方式接收它,我想将这些值视为遵循模式。没有卡、年和月月、卡和年。我尝试使用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
    )
)

然后是条件点,如果Array 2020 年的定义只有 2 个小数位,即 20 (19, 20, 21, 22, 23, . ..) 我会检查该值是否不大于 12,根据我们在 1 年内的月数,知道这一点,以识别此 Array 中的年份,我将应用另一个验证来检查该值是否大于 12 并且如果它有 2 或 4 位数字,但是我不能以任何方式应用它!

非常感谢您!

【问题讨论】:

  • 最好将这些值存储为对象。然后将这些对象存储在数组或列表中。这样,您就不必担心对象内的数据索引了。
  • 您能否详细说明无卡、年月或月、卡和年?在我看来,它只是卡片、月份和年份。
  • @Loki 我怎么能在 php 中这样做?
  • @nice_dev 我想整理 Array,因为整理好之后,我会把它转成 JSON。
  • PHP 并不是我真正的领域,但我发现这些链接可能对您有所帮助:php.net/manual/en/language.types.object.phpstackoverflow.com/questions/20174228/…

标签: php arrays sorting


【解决方案1】:

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

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

输出:https://3v4l.org/BZIFX

【讨论】:

  • 那张卡有 11 个月和 11 年呢?在这种情况下,您的代码将失败。
  • 它不会因为它接收的API而失败,只是从2015年开始,所以没有失败的风险,因为它是对信用卡/借记卡的验证
  • @JohnDoe 我已经首先说过这似乎是不可能的,但在阅读了 OP 的所有评论后,我想出了这个解决方案。现在检查它是 OP 的职责,如果失败,请告诉我。
  • 嗯好的。祝你好运
【解决方案2】:

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

但是有一个问题。

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

根据您的情况,有一次您将 2020 年显示为 20。因此,正如我在上述数组中提到的那样,它也可能是一个日期。因此,通过使用这种方法,每个逻辑都会失败。

【讨论】:

  • 很好,因为它与有效性有关,即月份和年份,在指月份的键中:09(九月)遵循模式,即 12 个月,值高于 2 或我可以将 4 位数字视为年份,我已经可以创建一个验证来验证该值的第一位数字并检查它是否以 0 或 1 开头(使用两位小数)以及该值是否不大于 12 ,这就是使用 If 的原因,但是我无法以任何方式应用它
猜你喜欢
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 2012-04-06
  • 2021-09-24
  • 2019-11-02
  • 2010-12-04
  • 1970-01-01
  • 2014-03-04
相关资源
最近更新 更多