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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

9753閲覧

URLを検知して配列に格納したい

Chelsea_10

総合スコア46

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2016/06/12 06:46

編集2016/06/12 07:23

お世話になっております。

URLとタイトルがカンマ区切りで含まれている配列を読み込み、ドメインが格納されている配列を検知させたいのですが、
エラー文が表示されてしまいうまくいきません。

下記現状の配列例

php

1//ドメイン 2 $domain = array("example.com","example.net","example.org") 3//URL 4$url = array("http://example.com/sitemap.html,サイトマップ - ああああ","http://example.net/sitemap.html,サイトマップ - いいいいい","http://example.org/sitemap.html,サイトマップ - うううう"."http://example4.com/sitemap.html,サイトマップ - ええええ");

aaa.comを検知させようとしている
下記コード内容

php

1foreach($url as $urlData) { 2 $search = preg_match($urlData,$domain[0]); 3}

理想は正規表現で取り、
aaa.comで検知させ、連想配列で

php

1$search['url'] = "http://example.com/sitemap.html"; 2$search['title'] = "サイトマップ - ああああ";

とさせたいのですが、何か良い手はないでしょうか?

個人的なロジックとして、
foreachでURLの回数分回し、ドメインを検出し、格納。

そしてexplode関数で、
$search['url'] = "http://example.com/sitemap.html";
$search['title'] = "サイトマップ - ああああ";

でできると思うのですが。。。

また

php

1preg_match(): Delimiter must not be alphanumeric or backslash in

とでてしまう理由がわかってないです。。

お手数ですが、ご教授いただけたらと思います。
何卒宜しくお願い申し上げます(_ _)

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

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

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

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

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

kei344

2016/06/12 06:49

例示用ドメインはご自身で所有されていない限りexample.comを利用してください。
Chelsea_10

2016/06/12 06:55

対応いたしました! 初心者なものでご教授いただきたいのですが、こちらインデックスされてしまうのを防ぐためでしょうか?それともコードレビュのしやすさという理由でしょうか??
Chelsea_10

2016/06/12 07:23

なるほど、勉強になりました。 ありがとうございます!!
kei344

2016/06/13 02:33

https://teratail.com/questions/37785 こちらで続きの質問を始められていますが、ひとまずご自身の回答をもって「解決済」にされてはいかがでしょうか。
Chelsea_10

2016/06/13 02:38

あれ、解決済にしていたはずなのに・・・ ありがとうございます! 共有させていただきます!!
guest

回答3

0

自己解決

kei344さんから
ご教授いただいたコードに

php

1$arr = array(); 2foreach( $domainTxt as $domain ) { 3 foreach( $urlData as $url ) { 4 if( !preg_match( '/'.preg_quote( $domain ).'/i', $url, $match ) ) { continue; }; 5 $pieces = explode( ',', $url ); 6 $arr[ 'url' ] = $pieces[ 0 ]; 7 $arr[ 'title' ] = $pieces[ 1 ]; 8 } 9} 10var_dump( $arr ); // 未テスト

を /の部分を{にしたりして 下記のコードへ変えたら

php

1$explodeSerps = array(); 2$getInfo = array(); 3foreach($domainList as $domain) { 4 foreach( $serps1 as $key => $url ) { 5 if(preg_match('{'.preg_quote("{$domain}").'}i',$url,$match)) { 6 $getInfo['rank'] = $key; 7 //キーワード検索結果の分類 →カンマで句切られているため 8 $explodeSerps = explode( ',', $url); 9 $getInfo['url'] = array($explodeSerps[0]); 10 $getInfo['title'] = array($explodeSerps[1]); 11 } 12 } 13}

無事エラー文も出ず、格納することができました。
ありがとうございます!!

投稿2016/06/13 02:50

Chelsea_10

総合スコア46

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

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

0

「リストで用意したドメインと同じものが入っているか」を取得したいのでしょうか。その場合foreachの使い方とpreg_matchの使い方をそれぞれ見直してみてください。

PHP

1$arr = array(); 2foreach( $domainTxt as $domain ) { 3 foreach( $urlData as $url ) { 4 if( !preg_match( '/'.preg_quote( $domain ).'/i', $url, $match ) ) { continue; }; 5 $pieces = explode( ',', $url ); 6 $arr[ 'url' ] = $pieces[ 0 ]; 7 $arr[ 'title' ] = $pieces[ 1 ]; 8 } 9} 10var_dump( $arr ); // 未テスト

【PHP: デリミタ - Manual】
http://www.php.net/manual/ja/regexp.reference.delimiters.php

【PHP: preg_match - Manual】
http://php.net/manual/ja/function.preg-match.php

投稿2016/06/12 07:42

編集2016/06/12 08:04
kei344

総合スコア69407

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

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

Chelsea_10

2016/06/12 08:01

ご回答ありがとうございます!! ただ Warning: preg_quote() expects parameter 1 to be string, array given Warning: preg_match() expects parameter 2 to be string, array given in と表示されてしまい、格納できていない状態なのですが。。。
kei344

2016/06/12 08:06

ああ、ちょっと書き間違いしていましたね。修正しておきました。 エラー内容を見ればご自身でも修正可能かなと思うので、触ってみてください。
guest

0

URLに含まれているスラッシュが原因で、エラーが発生しているようです。
下記サイトを参考にしてみてください。
http://blog.dacelo.info/php/entry-1036.html

投稿2016/06/12 06:57

yuji38kwmt

総合スコア437

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

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

Chelsea_10

2016/06/12 07:15 編集

preg_quote関数でスラッシュをエスケープしたのですが、現状同じエラー文が表示されてしまっています。。。 下記コード内容です。 foreach($url as $urlData) { $urlData = preg_quote($urlData); $search = preg_match($urlData,$domainTxt[0]); } エラー文 Warning: preg_match(): Delimiter must not be alphanumeric or backslash in
Chelsea_10

2016/06/12 07:15

上記記述ミスがあったので修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問