質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

4418閲覧

PHPで配列に格納しているクラスインスタンスを並び替えたい

okame

総合スコア54

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/08/05 11:30

複数のファイルにまたがるクラスをまとめてインスタンス&配列に格納した際に、
あとで並び替えを行う時の方法をご教示いただければ幸いです。

文字列や数値で使うsort()やrsort()等を使うと
正しくソートされなかったり、オプションの設定によってはエラーになってしまいます。

環境は、PHP5.3.3です。
不要な情報かもしれませんが、下記にプログラムを記載します。

// インスタンスとファイル名、クラス名のセット
$dirFileNameAll = array('この中に任意のディレクトリ内にあるファイル名を格納しています');
foreach ($dirFileNameAll as $value)
{
# ファイル名の拡張子(.php)を抜き取る
$extensionExclusion = '';
$extensionExclusion = basename($value, '.php');

# タイムスタンプを除いたファイル名(クラス名)を抜き取る $className = null; $className = substr($extensionExclusion, 15); # クラスのインスタンスを生成し、必要な情報をセットした上で配列に格納 require_once('./test/'.$value); $instance = null; $instance = new $className(); $instance->fileName = $value; $instance->className = $className; $this->test[] = $instance; <---------------------ここに格納したインスタンスを並べ替えたいです。

}

拙い説明で恐れ入りますが、宜しくお願いいたします。
もし情報に不足があればご指摘いただければと存じます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

className内の文字列でアルファベット順に並べばいいのでしょうか?
uasortを使って次のような感じでどうでしょう?

PHP

1<?php 2class test { 3 public $className; 4} 5 6$test = array(); 7for($i=1;$i<=10;$i++){ 8 $ins = new test(); 9 $ins->className = "test" . rand(1,10); 10 $test[] = $ins; 11 echo $ins->className . "<br />"; 12} 13 14function cmp($a, $b){ 15 if($a->className == $b->className)return 0; 16 return($a->className < $b->className) ? -1 : 1; 17} 18uasort($test, 'cmp'); 19var_dump($test); 20?>

投稿2015/08/05 12:22

hirohiro

総合スコア2068

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

okame

2015/08/05 12:37 編集

回答いただきありがとうございます!m(_ _)m スキルが乏しいため、現在ご教示いただいた内容を咀嚼中です^^; ...ちなみにですが、新たな関数を定義しないで並べ替える方法というのは 存在しますでしょうか?
hirohiro

2015/08/05 13:08

「数値添字配列」にオブジェクトを入れており、オブジェクトの任意のプロパティでソートしたいとなったらちょっと思いつきません。 しかし、例えばリストが開放される前に新たなインスタンスの追加が無いなら、「$dirFileNameAll」はクラス名のリストのようですから、インスタンスを作り始める前に先にこっちをソートしておく。や test[]を「クラス名=>オブジェクト」のような連想配列にしておいて、キー名でksort()でソートするなど 状況に応じた迂回策はありそうです。
okame

2015/08/05 13:47 編集

重ねてご回答くださり感謝です! 今日は時間が無いので明日にはなりますが、 >test[]を「クラス名=>オブジェクト」のような連想配列にしておいて、キー名でksort()でソートするなど で試してみます。
okame

2015/08/05 23:41

>test[]を「クラス名=>オブジェクト」のような連想配列にしておいて、キー名でksort()でソートする で試したらできました!解決しました! 本当にありがとうございました⭐︎
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問