php - 在php上对数组进行排序
问题描述
我正在使用 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 ) )
解决方案
鉴于您使用 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]);
});
推荐阅读
- c++ - 在 Eclipse 中使用 libtom/lbtomcrypt
- android - Android ScrollView 奇怪的滚动行为
- javascript - 如何保护原生函数不被 Google API 覆盖
- c# - SelectMany 将查询转换为可枚举列表。如何避免?
- php - 空字节注入仍在 PHP7 中?
- c - 有没有办法为 C 中的类型分配唯一编号?
- python - MultiLabelBinarizer 在逆变换时混淆数据
- c - C 程序不会从 STDIN 读取输入
- nginx - 嵌套在 React 网站中的 VueJs 网站
- java - 如何让 exoplayer 的 ClippingMediaSource 更精确?