最初の要素で配列を作る必要性を教えてください - PHPプロ!Q&A掲示板

2497

  • 300P

最初の要素で配列を作る必要性を教えてください

質問日時 / 2010年2月4日 00:19    回答数 / 3件

Questioner:  yumisaiki  このエントリーをはてなブックマークに追加 

キーワード / キーワードが設定されていません

こちらで教えて頂いてグーグルカレンダーのRSSを抜き出し、日付でソートして希望の数だけ表示させるというものを書きました。

  1. <?php
  2. error_reporting(1);
  3. require('XMLLibrary.php');
  4. $data = file_get_contents("http://www.google.com/calendar/feeds/1qkkqtv5eo3jimiidbltonpi1s%40group.calendar.google.com/public/basic");
  5. $array = XML_unserialize($data);
  6. $entry = $array['feed']['entry'];
  7.  
  8. $today = date("Y/m/d");
  9.  
  10. // 最初の要素で配列を作る
  11. $datas = array();
  12.  
  13. // ここから
  14. $tlong = strlen($entry[0]['title']);
  15. if($tlong>38){$entry[0]['title']=mb_strimwidth($entry[0]['title'],0,37);
  16. $cont[0]['title'] = $entry[0]['title']."&nbsp;...";
  17. }else $cont[0]['title'] = $entry[0]['title'];
  18. $cont[0]['content'] = mb_strimwidth($entry[0]['summary'],3,30);  
  19. $datas[0] = $cont[0]['content'];
  20. $cont[0]['link'] = $entry[0]['link']['0 attr']['href'];
  21.  
  22. // ↑ここまでの必要性が理解できません…。
  23.  
  24. print "最初の要素<br />";
  25. print_r ($datas)."<br/>";
  26. echo "<br/>";
  27. print_r ($cont)."<br/>";
  28.  
  29. print "<br />";
  30. print "エントリーの要素の数<br />";
  31. $count = count($entry);  
  32. print($count);
  33. for($i=1$i<$count$i++){ 
  34. $tlong = strlen($entry[$i]['title']);
  35. if($tlong>38){$entry[$i]['title'] = mb_strimwidth($entry[$i]['title'],0,37);
  36. $cont[$i]['title'] = $entry[$i]['title']."&nbsp;...";
  37. }else $cont[$i]['title'] = $entry[$i]['title'];
  38. $cont[$i]['content']=mb_strimwidth($entry[$i]['summary'],3,30);
  39. array_push($datas,$cont[$i]['content']);
  40. $cont[$i]['link'] = $entry[$i]['link']['0 attr']['href'];
  41. }
  42.  
  43. print "<br />";
  44. print "配列の一覧<br />";
  45. print_r ($datas)."<br/>";
  46. echo "<br/>";
  47. print_r ($cont)."<br/>";
  48.  
  49.  
  50. foreach($datas as $i => $s) {
  51.    if (strtotime($s) < strtotime($today)) {
  52.        /* 配列から削除する */
  53.         unset($datas[$i]);
  54.    }
  55.    }
  56.  
  57. asort( $datas );//日付でならべかえる
  58.  
  59.  
  60. $nub = count($datas);//7つまで表示したい
  61. if ($nub>=7){$a = $nub-7;
  62. unset($datas[$a]);
  63. }
  64.  
  65. foreach ($datas as $key => $value) {
  66.  print <<<ENTRY_PEINT
  67. <p class="m"><a href="#" onclick="window.open('{$cont[$key][ 'link' ]}','javascript_1','height=250,width=700,resizable');">{$cont[$key]['title']}</a></p><p class="s">{$cont[$key]['content']}…</p></p>\n
  68. ENTRY_PEINT;
  69. }
  70.  
  71. ?>

みごとできたのですが、
http://www.actionk.co.jp/gcalender1.php

私の頭の中では、どうして最初の要素を使って配列に入れる必要があるのかが理解できないんです。
これを消すと うまく並ばないのが納得いきません。

ほとんど同じなので… 毎度不思議な質問ですみません。 いきなり全部格納なぜできなんでしょうか?

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01win_php13行目から30行目あたりまでは確認のために自分で書い
┃┗A01-1yumisaiki0でなく1になっていることに気がつきました…。 アホ
┗A02magicflute2試行錯誤を経て、今のコードになったのでしょうが、

回答一覧

並び替え:

A01 満足
answererwin_php [2月4日 00:49]

13行目から30行目あたりまでは確認のために自分で書いたものではないのでしょうか?

for($i=0; $i<count($entry); $i++){ 

とすれば同じことでは?

この意見に回答する

ツリーへ TOPへ

A01-1
replyeryumisaiki [2月4日 12:43]

0でなく1になっていることに気がつきました…。
アホすぎてすみません。 同じことでした。

この意見に回答する

ツリーへ TOPへ

A02 満足
answerermagicflute2 [2月4日 03:24]

試行錯誤を経て、今のコードになったのでしょうが、
前のコードの名残も、ちらほら残っている。そんな感じです。

データがAtomである事、
33行目の$iの初期値を1と明確に示している事、
これらから、
始めは、フィード全体を$datasにコピーする方法をとっていて、
$datas[0]には、ATOMの文書情報が記述されている箇所を入れ、
<entry>部分を$datas[1]~に入れていたのではないでしょうか?
それが、6行目を記述した時から、前のコードの要領で、
entryの最初を$datas[0]に入れるようになったと推測します。

他人が触る事を想定して、コードやコメントを記述すれば、
自分にとってもわかりやすいものになり、
不明確や冗長な箇所も、洗練されていくのではないでしょうか。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
動的なURLを静的に見せる方法
 このエントリーをはてなブックマークに追加 
A
普通に考えて、mod_rewrite でしょうね。 http://www.nishishi.com/blog/2006/01/mod_rewrite_url.html...

>>続きを読む

GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)