こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHP arrayを使ってソートする。

PHP初心者です。
教えてください。
現在複数のXMLファイルをPHPで取り込んで、それぞれ要素のデータを画面上に一行ずつ表示させています。

全件取り込んで、日時(要素)のデータでソートしたいです。
配列を使ってfor文を使えばできると思っていますが、参考にできるサンプルがあれば教えていただけますでしょうか。
カンマ区切り(?)で1回文字列にしてソートとかすればいいのでしょうか?
イメージがつかめていません。

宜しくお願いします。

投稿日時 - 2011-12-20 17:13:36

QNo.7200436

すぐに回答ほしいです

質問者が選んだベストアンサー

ごめんなさい

foreach ($XmlData as $TmpData) {
print "<dd>" . $TmpData['Link'] . "</dd>";
}

ですね。
2次元配列になってるの忘れてました。

投稿日時 - 2011-12-21 18:23:25

お礼

再度丁寧に教えていただきありがとうございます。助かります。
すみませんでした。

投稿日時 - 2011-12-21 19:04:49

ANo.6

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.5

(相互リンク)
http://www.phppro.jp/qa/3521

投稿日時 - 2011-12-21 17:20:01

ANo.4

.$XmlData は単純な配列になっていますので
print "<dd>" . $XmlData['Link'] . "</dd>";
といった形で取り出せます。

投稿日時 - 2011-12-21 17:05:05

お礼

度々ありがとうございます。

ご指摘の通りテストしてみたのですが、表示されませんでした。
すみません。スキル不足です。

以下の通りwhileでlistに取り込み表示させてみました。
あとはソートの順番の問題が残っています。

while( list( $key, $value ) = each( $XmlData ) ){
echo( $key );
echo( ":" );

list( $key1, $value1 ) = each( $value );
echo( $key1 );
echo( ":" );
echo( $value1 );
echo( "<br>" );

}

投稿日時 - 2011-12-21 18:06:00

ANo.3

こんな感じですかね。
動作検証してないんで、デバッグしながらアレンジしてみてください。


function funcSort ($a, $b) {
if ($a['Date'] == $b['Date']) {
return 0;
}
return ($a['Date'] < $b['Date']) ? -1 : 1;
}

$fileName = "a.xml";
$xml = simplexml_load_file($fileName);

$XmlData = array();
foreach($xml->Entry as $Info) {

$XmlData[] = array(
'Link' => $Info->Link,
'Title' => $Info->Title,
'Blog' => $Info->Blog,
'Date' => $Info->Date,
);

}

usort($XmlData, "funcSort");

投稿日時 - 2011-12-20 22:49:23

お礼

早速ありがとうございます。助かります。
すみません。最後にもう一つお聞きしていいでしょうか。
usortの後に以下のものを追加して表示を確認したのですが、
表示されませんでした。
$XmlDataの代わりに、$InfoにするとDateで日時が早いデータ1件分だけ表示されました。
又表示についてですが、本来ソートされた$XmlDataをprintすれば、出力されると思ったのですが。
何を追加すればよろしいでしょうか。
宜しくお願い致します。

print "<dd>".$XmlData->Link."</dd>";
print "<dd>".$XmlData->Title."</dd>";
print "<dd>".$XmlData->Blog."</dd>";
print "<dd>".$XmlData->Date."</dd>";

投稿日時 - 2011-12-21 13:28:01

ANo.2

こちらもご参考になるかもしれません:
http://okwave.jp/qa/q1127809.html
http://okwave.jp/qa/q1128009.html
ご参考まで。

投稿日時 - 2011-12-20 17:58:22

ANo.1

データの組合せ次第ですが、PHP自体の配列のソート機能を使うか、usort などのコールバック関数が使えるソート機能を使って、多次元配列をソートすることも可能です。
usort は公式サイトに使用例が出ているので参考にしてください。

http://www.php.net/manual/ja/array.sorting.php
http://www.php.net/manual/ja/function.usort.php

投稿日時 - 2011-12-20 17:50:35

お礼

ありがとうございます。
よく分かっていないのですが、下記のプログラムを途中まで書いています。

この中のDateタグ(キー)の値(データ)でソートしたいです。

今出力しているデータを一回格納してksortなど使ってソートし、
再度出力するというようなロジックを追加すれば良いでしょうか?

それともfor文を入れ子の様にして追加して書けばいいのでしょうか?
どのように書けば良いか具体的に教えていただけないでしょうか?
申し訳ありません。

$fileName = "a.xml";
$xml = simplexml_load_file($fileName);

foreach($xml->Entry as $Info)

{
print "<dd>".$Info->Link."</dd>";
print "<dd>".$Info->Title."</dd>";
print "<dd>".$Info->Blog."</dd>";
print "<dd>".$Info->Date."</dd>";
}

$db = $xml->NewsKeisai;


ksort($db);

echo $db->Link ."<BR>";
echo $db->Title ."<BR>";
echo $db->Blog ."<BR>";
echo $db->Date ."<BR>";

投稿日時 - 2011-12-20 19:35:26

あなたにオススメの質問