Hướng dẫn php sort by date - sắp xếp php theo ngày

Tôi đang cố gắng làm cho chức năng scandir[]; vượt quá giới hạn bằng văn bản của nó, tôi cần nhiều hơn so với việc sắp xếp alpha mà nó hiện đang hỗ trợ. Tôi cần sắp xếp các kết quả scandir[]; để được sắp xếp theo ngày sửa đổi.

Tôi đã thử một vài giải pháp tôi tìm thấy ở đây và một số giải pháp khác từ các trang web khác nhau, nhưng không có giải pháp nào cho tôi, vì vậy tôi nghĩ rằng nó hợp lý để tôi đăng ở đây.

Điều tôi đã thử cho đến nay là:

function scan_dir[$dir]
{
    $files_array = scandir[$dir];
    $img_array   = array[];
    $img_dsort   = array[];
    $final_array = array[];

    foreach[$files_array as $file]
    {
        if[[$file != "."] && [$file != ".."] && [$file != ".svn"] && [$file != ".htaccess"]]
        {
            $img_array[] = $file;
            $img_dsort[] = filemtime[$dir . '/' . $file];   
        }
    }

    $merge_arrays = array_combine[$img_dsort, $img_array];
    krsort[$merge_arrays];

    foreach[$merge_arrays as $key => $value]
    {
        $final_array[] = $value;    
    }

    return [is_array[$final_array]] ? $final_array : false;
}

Nhưng, điều này dường như không hiệu quả với tôi, nó chỉ trả về 3 kết quả, nhưng nó sẽ trả về 16 kết quả, bởi vì có 16 hình ảnh trong thư mục.

HALFER

Huy hiệu vàng 19.6K1792 Huy hiệu bạc175 Huy hiệu đồng17 gold badges92 silver badges175 bronze badges

Hỏi ngày 12 tháng 8 năm 2012 lúc 15:10Aug 12, 2012 at 15:10

function scan_dir[$dir] {
    $ignored = array['.', '..', '.svn', '.htaccess'];

    $files = array[];    
    foreach [scandir[$dir] as $file] {
        if [in_array[$file, $ignored]] continue;
        $files[$file] = filemtime[$dir . '/' . $file];
    }

    arsort[$files];
    $files = array_keys[$files];

    return [$files] ? $files : false;
}

Đã trả lời ngày 12 tháng 8 năm 2012 lúc 15:50Aug 12, 2012 at 15:50

Ryon Shermanryon ShermanRyon Sherman

1.4931 Huy hiệu vàng11 Huy hiệu bạc8 Huy hiệu đồng1 gold badge11 silver badges8 bronze badges

3

Đây là một câu hỏi tuyệt vời và câu trả lời của Ryon Sherman, cung cấp một câu trả lời vững chắc, nhưng tôi cần sự linh hoạt hơn một chút cho nhu cầu của mình vì vậy tôi đã tạo ra chức năng mới hơn này: better_scandir.

Mục tiêu là cho phép các cờ đặt hàng sắp xếp scandir hoạt động như mong đợi; Không chỉ là phương thức sắp xếp mảng ngược trong câu trả lời của Ryon. Và cũng cài đặt rõ ràng

function scan_dir[$dir] {
    $ignored = array['.', '..', '.svn', '.htaccess'];

    $files = array[];    
    foreach [scandir[$dir] as $file] {
        if [in_array[$file, $ignored]] continue;
        $files[$file] = filemtime[$dir . '/' . $file];
    }

    arsort[$files];
    $files = array_keys[$files];

    return [$files] ? $files : false;
}
0 cho sắp xếp mảng vì các giá trị thời gian đó rõ ràng là số.

Việc sử dụng là như thế này; Chỉ cần chuyển

function scan_dir[$dir] {
    $ignored = array['.', '..', '.svn', '.htaccess'];

    $files = array[];    
    foreach [scandir[$dir] as $file] {
        if [in_array[$file, $ignored]] continue;
        $files[$file] = filemtime[$dir . '/' . $file];
    }

    arsort[$files];
    $files = array_keys[$files];

    return [$files] ? $files : false;
}
1 sang
function scan_dir[$dir] {
    $ignored = array['.', '..', '.svn', '.htaccess'];

    $files = array[];    
    foreach [scandir[$dir] as $file] {
        if [in_array[$file, $ignored]] continue;
        $files[$file] = filemtime[$dir . '/' . $file];
    }

    arsort[$files];
    $files = array_keys[$files];

    return [$files] ? $files : false;
}
2 hoặc thậm chí để trống cho mặc định:

better_scandir[, SCANDIR_SORT_DESCENDING];

Và đây là chính chức năng:

function better_scandir[$dir, $sorting_order = SCANDIR_SORT_ASCENDING] {

  /****************************************************************************/
  // Roll through the scandir values.
  $files = array[];
  foreach [scandir[$dir, $sorting_order] as $file] {
    if [$file[0] === '.'] {
      continue;
    }
    $files[$file] = filemtime[$dir . '/' . $file];
  } // foreach

  /****************************************************************************/
  // Sort the files array.
  if [$sorting_order == SCANDIR_SORT_ASCENDING] {
    asort[$files, SORT_NUMERIC];
  }
  else {
    arsort[$files, SORT_NUMERIC];
  }

  /****************************************************************************/
  // Set the final return value.
  $ret = array_keys[$files];

  /****************************************************************************/
  // Return the final value.
  return [$ret] ? $ret : false;

} // better_scandir

Đã trả lời ngày 23 tháng 5 năm 2019 lúc 17:46May 23, 2019 at 17:46

Giacomo1968Giacomo1968Giacomo1968

25.1k11 Huy hiệu vàng69 Huy hiệu bạc96 Huy hiệu Đồng11 gold badges69 silver badges96 bronze badges

Ví dụ thay thế ..

$dir = "/home/novayear/public_html/backups";
chdir[$dir];
array_multisort[array_map['filemtime', [$files = glob["*.{sql,php,7z}", GLOB_BRACE]]], SORT_DESC, $files];
foreach[$files as $filename]
{
  echo "".substr[$filename, 0, -4]."
"; }

Đã trả lời ngày 20 tháng 12 năm 2013 lúc 15:49Dec 20, 2013 at 15:49

NovayearnovayearNovaYear

1571 Huy hiệu vàng2 Huy hiệu bạc13 Huy hiệu đồng1 gold badge2 silver badges13 bronze badges

scandir khác giữ 5 tệp mới nhất:

public function checkmaxfiles[]
{

    $dir = APPLICATION_PATH . '\\modules\\yourmodulename\\public\\backup\\';
    // '../notes/';
    $ignored = array['.', '..', '.svn', '.htaccess'];
    $files = array[];
    foreach [scandir[$dir] as $file] {
        if [in_array[$file, $ignored]] continue;
        $files[$file] = filemtime[$dir . '/' . $file];
    }
    arsort[$files];
    $files = array_keys[$files];
    $length = count[$files];
    if[$length < 4 ]{
        return;
    }
    for [$i = $length; $i > 4; $i--] {
           echo "Erase : " .$dir.$files[$i];
           unlink[$dir.$files[$i]];
    }

}

Toni

1.4874 Huy hiệu vàng13 Huy hiệu bạc22 Huy hiệu đồng4 gold badges13 silver badges22 bronze badges

Đã trả lời ngày 20 tháng 5 năm 2021 lúc 1:03May 20, 2021 at 1:03

Bài Viết Liên Quan

Chủ Đề