激凹みから立ち直る方法

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

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

宜しくお願いします。

A 回答 (6件)

ごめんなさい



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

ですね。
2次元配列になってるの忘れてました。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/12/21 19:04

(相互リンク)


http://www.phppro.jp/qa/3521
    • good
    • 0

.$XmlData は単純な配列になっていますので


print "<dd>" . $XmlData['Link'] . "</dd>";
といった形で取り出せます。
    • good
    • 0
この回答へのお礼

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

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

以下の通り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

こんな感じですかね。


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


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");
    • good
    • 0
この回答へのお礼

早速ありがとうございます。助かります。
すみません。最後にもう一つお聞きしていいでしょうか。
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

こちらもご参考になるかもしれません:


http://oshiete.goo.ne.jp/qa/1127809.html
http://oshiete.goo.ne.jp/qa/1128009.html
ご参考まで。
    • good
    • 0

データの組合せ次第ですが、PHP自体の配列のソート機能を使うか、usort などのコールバック関数が使えるソート機能を使って、多次元配列をソートすることも可能です。


usort は公式サイトに使用例が出ているので参考にしてください。

http://www.php.net/manual/ja/array.sorting.php
http://www.php.net/manual/ja/function.usort.php
    • good
    • 0
この回答へのお礼

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

この中の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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!