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

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

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

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

Q&A

解決済

2回答

1351閲覧

PHPで配列からある日付を取り除く

dokoniarukana

総合スコア31

PHP

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

0グッド

0クリップ

投稿2016/11/05 03:57

編集2016/11/05 03:58

前回の質問と少し似ているのですが、
今回は配列に日付とそれ以外のデータがあります。

$name = $date = []; if ($node->Filter('table')) { for ($i = 1; $i < 10; $i ++) { $date[] = $node->filter('tr')->eq($i)->filter('td')->text(); $name[] = $node->filter('tr')->eq($i)->filter('a')->text(); }; }; var_dump(array_map(null,$date, $name));

array(10) {
[0]=>
string(10) "2016/08/13"
string(10) "○○"
[1]=>
string(10) "2016/10/21"
string(10) "○○"
[2]=>
string(10) "2015/09/18"
string(10) "○○"
[3]=>
string(10) "2011/07/08"
string(10) "○○"
[4]=>
string(10) "2016/07/23"
string(10) "○○"
[5]=>
string(10) "2015/06/30"
string(10) "○○"
[6]=>
string(10) "2012/03/20"
string(10) "○○"
...

前回は60日前だけの日付を配列に残したいということでしたが、
その日付が含まれるデータも取りたい場合どのようにすればよいでしょうか。
ここでいうと↓これだけを抽出したいのです。

[1]=>
string(10) "2016/10/21"
string(10) "○○"

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

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

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

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

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

guest

回答2

0

php

1if(new Datetime($targetDate = $node->filter('tr')->eq($i)->text()) > new Datetime('-2 month')) { 2 $date[] = $targetDate; 3}

だったならば

php

1if(new Datetime($targetDate = $node->filter('tr')->eq($i)->text()) > new Datetime('-2 month')) { 2 $date[] = $targetDate; 3 $name[] = $node->filter('tr')->eq($i)->filter('a')->text(); 4}

で試したんですよね?もちろんそして何がダメだったのか書くべきかと
投げ捨てはいかん

投稿2016/11/05 05:29

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

php

1$ts60 = strtotime("-60 day");// 60日前のタイムスタンプ 2 3$data = array(); 4 5if ($node->Filter('table')) { 6 for ($i = 1; $i < 10; $i ++) { 7 $hiduke = $node->filter('tr')->eq($i)->filter('td')->text(); 8 if(strtotime($hiduke) > $ts60) 9 { 10 $date[] = array( 11 'date' => $hiduke;, 12 'name' => $node->filter('tr')->eq($i)->filter('a')->text() 13 ); 14 } 15 }; 16}; 17 18var_dump($date);

前回の回答とほぼ同じような回答になりますが、前回のにも言える補足、strtotime使うにしろDatetimeクラス使うにしろ、60日前と比較するものは固定なものなので、for文の外で計算して、冗長な処理なので毎回60日前という日付を作り出さないという事でしょうか

投稿2016/11/05 04:29

編集2016/11/05 04:37
hiim

総合スコア1689

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

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

dokoniarukana

2016/11/05 05:09

うまく伝えられずに申し訳ありません。前回の回答を参考にするとどうしても60日以内のもの以外も配列に出てしまうのです。日付だけの配列なら無事にできるのですが、今回は項目がふたつあるのでどうしたものかなと…。
hiim

2016/11/05 05:22

ん?なので上の回答でできないですか?項目は二つありますが、質問文のコードでいう$iを変数としてfor文まわしてますが、たとえば$=2の時だけ60日いないなのでOKという事で同じ$i=2番目の要素のaタグもパス $node->filter('tr')->eq(2)->filter('td')->text(); $node->filter('tr')->eq(2)->filter('a')->text(); の二つを残したいという事ですよね? そうであれば$i目の日付を比較してOKならその$i目の日付とaタグ(中身?)を配列に放り込んでいけばいいんじゃないのですか?
dokoniarukana

2016/11/05 05:24

ようやく理解できました。神です。
hiim

2016/11/05 05:25

ああ!意味がわかりました。 [1]=> string(10) "2016/10/21" string(10) "○○" という部分ですね! まず上記のようなデータ肩は根本的に少しフォーマットおかしいと思います。 普通であれば array(10) { [0]=> array(2){ [0]=>string(10) "2016/08/13" [1]=>string(10) "○○" } か私が回答に書いたような array(10) { [0]=> array(2){ 'date'=>string(10) "2016/08/13" 'name'=>string(10) "○○" } のようにする事になると思います
hiim

2016/11/05 05:25

ああ、入れ違いになりましたね、、、そういう事です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問