2

サーバー上にcronジョブの配列があり、それらが起動した日付で並べ替える必要があります。開始配列は次のとおりです。

Array ( 
[0] => 00 08 24 10 * 2012 curl --user user:pass command 
[1] => 00 09 24 10 * 2012 curl --user user:pass command
[2] => 00 08 18 10 * 2012 curl --user user:pass command
[3] => 00 11 18 10 * 2012 curl --user user:pass command
)

このリストを自分のWebサイトの表に表示したいのですが、月、日、時間、分で並べ替えています。

必要な出力は次のとおりです。

Array(
[0] => 00 08 18 10 * 2012 curl --user user:pass command
[1] => 00 11 18 10 * 2012 curl --user user:pass command
[2] => 00 08 24 10 * 2012 curl --user user:pass command
[3] => 00 09 24 10 * 2012 curl --user user:pass command

誰かがこれを達成するために私が行く必要がある方向に私を向けることができますか?

御時間ありがとうございます。

4

1 に答える 1

1

これはどう?

$a = array(
  '00 08 24 10 * 2012 curl --user user:pass command',
  '00 09 24 10 * 2012 curl --user user:pass command',
  '00 08 18 10 * 2012 curl --user user:pass command',
  '00 11 18 10 * 2012 curl --user user:pass command',
);

usort($a, function($f, $s) {
   $fx = implode('', array_reverse(preg_split('/\D+/', $f)));
   $sx = implode('', array_reverse(preg_split('/\D+/', $s)));
   return strcmp($fx, $sx);
});

var_dump($a);
/*
0 => string '00 08 18 10 * 2012 curl --user user:pass command' (length=48)
1 => string '00 11 18 10 * 2012 curl --user user:pass command' (length=48)
2 => string '00 08 24 10 * 2012 curl --user user:pass command' (length=48)
3 => string '00 09 24 10 * 2012 curl --user user:pass command' (length=48)
 */

ここで行ったことは、基本的に、問題のすべての文字列からすべての数値部分を抽出し、それらを数値文字列に反転してから、これらの文字列を比較することです。

これは2つの方法で変更できます。1つは、コマンド自体の数値と一致しないように正規表現を強化することです。

   $fx = implode('', array_reverse(
     preg_split('/(?<=\d{4}).+$|\D+/', $f)));

...次に、メモ化機能を使用します。

function getSortCriteria($line) {
  static $criterias = array();
  if (! isset($criterias[$line])) {
    $numbers = preg_split('/\D+/', substr($line, 0, 18));
    $criterias[$line] = implode('', array_reverse($numbers));
  }
  return $criterias[$line];
}

usort($a, function($f, $s) { 
  return strcmp(getSortCriteria($f), getSortCriteria($s)); 
});

var_dump($a);    

substringここで、残りの文字列を;で削除しました。より効率的だと思います。それでも、これを正規表現でどのように実行できるかを示すことも役立つ場合があります。))

于 2012-09-26T11:03:57.590 に答える