2

このような配列を並べ替える方法を知りたいです:

$array[] = Array (
    'name' => '/home/gtsvetan/public_html/presta/cms.php'
    'type' => 'text/x-php'
    'size' => 1128
    'lastmod'  => 1339984800
);
$array[] = Array (
    'name' => '/home/gtsvetan/public_html/presta/docs/'
    'type' => 'dir'
    'size' => 0
    'lastmod' => 1329253246
);

最初にタイプ(最初にフォルダー、次にファイル)でソートし、次にアルファベット順にソートしたいと思います。しかし、私はそれを分類する方法がわかりません。

よろしく、ジョージ!

4

2 に答える 2

1

usort()を使用できます

比較関数では、名前とタイプについて2つの比較を行います-以下のようなものです:

function compare_f($a,$b) {

 if($a['type']=='dir'&&$b['type']!='dir') return 1;
 if($a['type']!='dir'&&$b['type']=='dir') return -1;
 if(substr($a['name'],-1,1)=='/') $a['name']=substr($a['name'],0,-1);
 if(substr($b['name'],-1,1)=='/') $b['name']=substr($b['name'],0,-1);
 $af_array=explode('/',$a['name']);
 $a_name=$af_array[count($af_array)-1];
 $bf_array=explode('/',$b['name']);
 $b_name=$bf_array[count($bf_array)-1];

 if($a_name>$b_name) 
    return 1;
  return -1;

}

usort($array,'compare_f');
于 2012-07-20T01:10:41.123 に答える
0

あなたはこのようなことをすることができます。

$dir = array();
$file = array();

$dir = array();
$file = array();

foreach($array as $b=>$v) {
if($v['type'] == "dir") {
    $dir[] = $v;
} else {
    $file[] = $v;
}
}

$combined = array_merge($dir, $file);

お気軽に調整してください。

于 2012-07-20T01:19:01.750 に答える