スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

はてなブックマークに追加 はてなブックマーク - スポンサーサイト

PHP:多次元配列ソートと配列要素の削除

PHPには、便利な関数が豊富にあります。
Ver.2.47で、アルバムの画像の表示順序をファイル名順と更新日時順が選択できるようにしました。 また、表示順序がファイル名順の場合、Windowsエクスプローラと同じくアルファベットの大文字/小文字を区別しないで並び変えるようにしました。
これには、array_multisort()という関数を使っています。
ディレクトリで読み取ったファイル一覧を、セッション変数に、
$_SESSION['photo'][] = array(
  'file'=>myfile_DECODE($file),
  'file_low'=>mb_strtolower(myfile_DECODE($file)),
  'type'=>'img',
  'time'=>filemtime($path_SJIS.'/'.$file));
のようにして配列で保管しておき、ファイル名順と更新日時順の切り替えで以下ようにして並び替えをしています。

if ($_SESSION['photo_view_sort'] == 'time') {
  $time = array();
  foreach ($_SESSION['photo'] as $photo) $time[] = $photo['time'];
  array_multisort($time, SORT_ASC, SORT_NUMERIC, $_SESSION['photo']);
} else {
  $file_low = array();
  foreach ($_SESSION['photo'] as $photo) $file_low[] = $photo['file_low'];
  array_multisort($file_low, SORT_ASC, SORT_STRING, $_SESSION['photo']);
}

Ver.2.47では、アルバムにファイル削除機能(___trash___フォルダへの移動)も追加しました。この場合、実際のファイル移動と共に上記配列から、該当ファイルの要素を削除する必要があります。これには、array_splice()を使います。
  array_splice($_SESSION['photo'], $page-1, 1);
unset()では駄目です。
例えば、$a[0]='A',$a[1]='B',$a[2]='C',$a[3]='D',$a[4]='E'みたいな配列があった場合、
unset($a[3])とすると、
  $a[0]='A',$a[1]='B',$a[2]='C',$a[4]='E'
と歯抜け状態になってしまいます。
array_splice($a,3,1)では、添え字もきちんと詰めてくれます。
  $a[0]='A',$a[1]='B',$a[2]='C',$a[3]='E'
foreachで処理する場合は、unset()でも問題ないのかも知れませんが、添え字で処理する場合は不都合です。

unset()で歯抜けになるのは、以下の記事で知りました。
http://xiaoxia.exblog.jp/7467902/
スポンサーサイト

はてなブックマークに追加 はてなブックマーク - PHP:多次元配列ソートと配列要素の削除

theme : PHP
genre : コンピュータ

comment

Secret

プロフィール

ok.2nd

Author:ok.2nd
HomePage:
http://ok2nd.web.fc2.com/
Email: m.ok.2nd@gmail.com

最新記事
最新コメント
最新トラックバック
月別アーカイブ
FC2ブログランキング

FC2Blog Ranking

検索フォーム
カテゴリ
リンク
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
ユーザータグ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。