сортировать многомерный массив по дате - PullRequest
0 голосов
/ 07 апреля 2020

у меня есть даты и имена в текстовом виде в файле, например

2-4-2020,bat
14-3-2020,ball
25-6-2019,purse
27-8-2019,rice

, поэтому я пытаюсь отсортировать их в порядке возрастания

<?php
$newdates=$mydates=array();    
$lines = file('n:/mydata.txt');    
foreach($lines as $data)
{
    $mydates[]=explode(',',$data);
}  

$countdates=count($mydates);    
for ($i=0;$i<$countdates;$i++){
    $chkdate=$mydates[$i][0];
    $currentdate=DateTime::createFromFormat('d-m-Y', $chkdate)->format('d-m-Y');
    $mydates[$i][0]=$currentdate;
}  
array_multisort($mydates);
$newdates=$mydates;    
$file = fopen("n:/newdates.txt","w");
foreach ($newdates as $contentline)
{
    fputcsv($file,$contentline);
}    
fclose($file);

, но не сортировать вообще

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Вы можете прочитать файл в массив, используя функцию file. Затем вы можете отсортировать массив, используя usort:

$fileName = 'n:/mydata.txt';

$lines = file($fileName);

usort($lines, function($a, $b) {
    foreach (['a', 'b'] as $variable) {
        $parts = explode(',', $$variable);
        $$variable = DateTime::createFromFormat('j-n-Y', $parts[0]);
    }

    return $a < $b ? -1 : 1;
});

file_put_contents(implode("\n", $lines), $fileName);
0 голосов
/ 07 апреля 2020

Это может быть сделано немного проще. Вам нужно использовать функции usort() и strtotime().

Вот упрощенный пример

$mydates= array(
    ['2-4-2020','bat'],
    ['14-3-2020','ball'],
    ['25-6-2019','purse'],
    ['27-8-2019','rice']
    );

usort($mydates, function($a,$b) {
    return strtotime($a[0]) > strtotime($b[0]);
});

foreach ($mydates as $contentline) {
    echo json_encode($contentline);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...