【问题标题】:Sort an array on php在php上对数组进行排序
【发布时间】:2021-02-18 15:22:24
【问题描述】:

我正在使用 php,并使这个小函数只返回一个同月的数组,但我也需要按天的顺序返回,我尝试使用 sort、usort,但都没有成功。

$jsonFile     = file_get_contents(BASE_TEMPLATE . '/templates/json/' . AMBIENTE . '/' . 'demo_birthday' . '-data.json');
$jsonData     = json_decode($jsonFile);

如果我打印 $jsonData,我会得到 25 个对象的数组,如下所示:

array(25) { 
    [0]=> object(stdClass)#91 (6) { 
            ["id"]=> string(3) "105" 
            ["day"]=> string(1) "6" 
            ["month"]=> string(7) "febrero" 
            ["name"]=> string(15) "diego fernandez" 
            ["created"]=> string(19) "2021-02-18 07:16:05" 
            ["modified"]=> string(19) "2021-02-18 07:34:18" 
            }

            .
            .
            .

    [24]=> object(stdClass)#115 (6) { 
            ["id"]=> string(3) "129" 
            ["day"]=> string(2) "25" 
            ["month"]=> string(1) "2" 
            ["name"]=> string(15) "martin riquelme" 
            ["created"]=> string(19) "2021-02-18 07:16:06" 
            ["modified"]=> string(19) "2021-02-18 07:16:06" 
            } 
};


// this is used as an array map to compare with actual month
$arrayMonth = array(
    array('ENERO', 'ENE', '01', '1'),
    array('FEBRERO', 'FEB', '02', '2'),
    array('MARZO', 'MAR', '03', '3'),
    array('ABRIL', 'ABR', '04', '4'),
    array('MAYO', 'MAY', '05', '5'),
    array('JUNIO', 'JUN', '06', '6'),
    array('JULIO', 'JUL', '07', '7'),
    array('AGOSTO', 'AGO', '08', '8'),
    array('SEPTIEMBRE', 'SEPT', '09', '9'),
    array('OCTUBRE', 'OCT', '10'),
    array('NOVIEMBRE', 'NOV', '11'),
    array('DICIEMBRE', 'DIC', '12')
);

// this puts the json data on Slides
foreach ($jsonData as &$slide) {
    $resultNull = getBirthdayMonth($actualMonth, $slide, $arrayMonth);

    if (!empty($resultNull)) {
        array_push($result, getBirthdayMonth($actualMonth, $slide, $arrayMonth));    
    }
}


// This is the function that I need to return in order of day
function getBirthdayMonth($actualMonth, $slide, $arrayMonth)
{
    $month = array();

    if (in_array(strtoupper($slide->month), $arrayMonth[$actualMonth - 1])) {
        array_push($month, array($slide->day, $arrayMonth[$actualMonth - 1][0], $slide->name));
    }

    return $month;
}

我需要这个数组,月份,按天保存,我似乎不明白我在这里做错了什么。

这是我使用 print_r(getBirthdayMonth($actualMonth, $slide, $arrayMonth)); 时的实际输出;

Array ( [0] => Array ( [0] => 6 [1] => FEBRERO [2] => diego fernandez ) )
Array ( [0] => Array ( [0] => 2 [1] => FEBRERO [2] => mirko valencia ) )
Array ( [0] => Array ( [0] => 5 [1] => FEBRERO [2] => pablo soto ) )
Array ( [0] => Array ( [0] => 1 [1] => FEBRERO [2] => lorena onate ) )
Array ( [0] => Array ( [0] => 5 [1] => FEBRERO [2] => daniela zuñiga ) )

但我需要得到这个:

Array ( [0] => Array ( [0] => 1 [1] => FEBRERO [2] => lorena onate ) )
Array ( [0] => Array ( [0] => 2 [1] => FEBRERO [2] => mirko valencia ) )
Array ( [0] => Array ( [0] => 5 [1] => FEBRERO [2] => daniela zuñiga ) )
Array ( [0] => Array ( [0] => 5 [1] => FEBRERO [2] => pablo soto ) )
Array ( [0] => Array ( [0] => 6 [1] => FEBRERO [2] => diego fernandez ) )

【问题讨论】:

  • 我认为如果我们知道您的代码中包含的内容会很有用。 $slide 是什么? $arrayMonth 中有什么内容?等等。我们无法猜测。这个函数应该完成什么?简而言之:很高兴知道输入是什么,以及您期望的输出是什么。
  • 您可能希望包含当前输出和想要的输出的示例。包括您的排序尝试也可能是一件好事(您可能会得到解释为什么他们无法工作并学到一两件事)。
  • @KIKOSoftware 感谢您的反馈,希望此编辑对您有所帮助
  • 我认为确实如此。谢谢。
  • @El_Vanja 好的,谢谢,我输入了我得到的输出,我不需要得到什么,但我似乎不明白我应该做什么,因为排序不起作用跨度>

标签: php arrays sorting multidimensional-array


【解决方案1】:

鉴于您使用 print_r 显示的内容,您可以使用 array_multisort:

$values = getBirthdayMonth($actualMonth, $slide, $arrayMonth);
array_multisort($values); // The default options work for your case

或者像你说的那样:

$values = getBirthdayMonth($actualMonth, $slide, $arrayMonth);
function cmp($a, $b)
{
    if ($a[0] == $b[0]) {
        return 0;
    }
    return ($a[0] < $b[0]) ? -1 : 1;
}

usort($values, "cmp");

//Or even shorter:
usort($values, function ($a, $b) {
  return gmp_sign($a[0] - $b[0]);
}); 

【讨论】:

猜你喜欢
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
相关资源
最近更新 更多