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

解決済みの質問

ある文字を含む文字列のみ配列にする

何度もすみません。

array(XX) {
[0]=> array(2) { ["text"]=> string(YY) "りんご美味しい" ["name"]=> string(Z) "あいこ" }
[1]=> array(2) { ["text"]=> string(XX) "富士山登りたい" ["name"]=> string(Z) "みほ" } [2]=> array(2) { ["text"]=> string(XX) "動物園行きたい" ["name"]=> string(Z) "なほ" } [3]=> array(2) { ["text"]=> string(XX) "メロン美味しい" ["name"]=> string(Z) "ゆい" } [4]=> array(2) { ["text"]=> string(XX) "お腹すいた" ["name"]=> string(Z) "まこ" }
[5]=> array(2) { ["text"]=> string(XX) "数学やだー" ["name"]=> string(Z) "あいこ" }
………
}

のような配列$textがあり、そこから["text"]に

$keyword = array("りんご","メロン")

の文字列を含むものだけ取り出したいです。
今までもらった回答を参考に

$key_text = array();
foreach($text as $key => $v1){
foreach($keyword as $v2){
if(strpos($v1[text], $v2) !== false){
$key_text[] = $key;
}
}
}

と書いてみたのですが、上手く動作しません。
よろしければどこが間違っているかご指摘ください。
お願いします。

投稿日時 - 2013-12-03 14:21:39

QNo.8371647

すぐに回答ほしいです

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

$v1[text]
とすると定数textを表してしまい、これが定義されている場合には当然その値が使われてしまいます。定数が定義されていない場合にはFatalエラーを起こして停止すべきところですが、PHPには「未定義の定数はその文字列に変換される」というお節介な機能がついているので、提示されたコードでも一応動作はするはずです。しかし、
Notice: Undefined constant
というエラーが表示されてしまっているのではないでしょうか。「うまく動作しません」としか書かれていないので確実ではないですが。

なお、正しく動作させるには
$v1["text"]
としてください。

投稿日時 - 2013-12-03 16:28:25

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

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

回答(3)

ANo.2

ANo.1です。

蛇足ですが、もし『textだけ』抜き出したいなら

$key_text = array();
foreach($text as $key => $v1) {
foreach($keyword as $v2) {
if(strpos($v1['text'], $v2) !== false){ $key_text[] = $v1['text']; }
}
}

です(理解できているとは思いますが念のため)。

投稿日時 - 2013-12-03 16:21:18

ANo.1

>$key_text[] = $key;

該当する要素の「添え字」が欲しいのでしょうか?そうでなく要素自体(配列)は必要ならば、$v1 を使うべきでは?

(テストしたソース)
<?php
$text = array(
array("text"=>"りんご美味しい", "name"=>"あいこ"),
array("text"=>"富士山登りたい", "name"=>"みほ"),
array("text"=>"動物園行きたい", "name"=>"なほ"),
array("text"=>"メロン美味しい", "name"=>"ゆい"),
array("text"=>"お腹すいた", "name"=>"まこ"),
array("text"=>"数学やだー", "name"=>"あいこ"),
);
$keyword = array("りんご", "メロン");

$key_text = array();
foreach($text as $key => $v1) {
foreach($keyword as $v2) {
if(strpos($v1['text'], $v2) !== false){ $key_text[] = $v1; }
}
}
print "<pre>";
print_r($key_text);
print "</pre>";

投稿日時 - 2013-12-03 16:19:24