私は配列に文字列を分割するすべてのトピックを検索しました。しかし、私は実際に私のニーズに関係するものを実際に遭遇していません。配列を配列に分割し、配列の各項目をクエリ文字列で使用する
検索ボックスで、ユーザーは任意の長さの文字列を入力します(単語の長さはわかりません)。送信時に、PHPスクリプトは値を$ qとして収集します。
例:
- のは
$q="users typed in search query of any length."
- PHPが
("users","type","in","search","etc")
のよう$stringArray
に$q
の各単語を分割するとしましょう。 - のよう
$stringArray
の各項目を反復するPHP:for(each $stringArray as $i);
- はマッチを見つけると
$q
のいずれかに一致するすべての行を表示するために、アレイの各$i
を使用してクエリを実行します。
PHPコード
<?php
require_once('../data/conString_mysqli.php');
if(isset($_POST['services'])){$q = trim($_POST['services']);}else if(isset($_REQUEST['q'])){$q = trim($_REQUEST['q']);}
else if(isset($_REQUEST['s'])){$s = trim($_REQUEST['q']);}else{header('Location:../home/');}
?>
<?php
$stringArray = explode(" ", $q);//split using spaces
foreach (array($stringArray) as &$q) {
?>
<?php
//run a search query here
$search_query = mysqli_query($connect,"SELECT * FROM service_providers WHERE INSTR(pname, '".$q."') OR INSTR(bizaddr, '".$q."') OR INSTR(bizname, '".$q."') OR INSTR(bizdesc, '".$q."') OR INSTR(pmobile, '".$q."') OR INSTR(pemail, '".$q."') OR INSTR(bizcat, '".$q."') OR INSTR(pmobile, '".$q."')ORDER BY bizname");
$records = mysqli_num_rows($search_query);
if(!$records >= 1){
die(mysql_error());//('<script type="text/javascript">alert("PROVIDERS SEARCH RESULT \n\nCould not find a match. \nTry using one word, exact words. \nYou can search by category. Just type the category name (tv repairs, air conditioning, painting, car repairs, carpentry, plumbing, tiles, rug, washing, catering, cakes, creams, computer, software, hardware etc. \n\nDo not use periods, commas, and other symbols!");window.location="test_array.php?q='.$q.'";<script>');
}else {
while($row = mysqli_fetch_array($search_query)){
$pcode = $row['pcode'];
$bizname = $row['bizname'];
$bizaddr = $row['bizaddr'];
$bizdesc = $row['bizdesc'];
$pname = $row['pname'];
$pmobile = $row['pmobile'];
$pemail = $row['pemail'];
if($row['bizcat'] ==''){
$category = "UNKNOWN CATEGORY";}
else{$category = $row['bizcat'];}
?>
<?php
echo $pcode .'<br />';
echo $bizname .'<br />';
echo $bizaddr .'<br />';
echo $bizdesc .'<br />';
echo $category .'<br />';
echo $pname .'<br />';
echo $pmobile .'<br />';
echo $pemail .'<br />';
echo '--------------------' .'<br />';
}
}
?>
<?php
}
?>
私はこのコードを実行すると、それは下のエラーを返します。配列を削除し、あなたが持っているでしょう17
foreach (array($stringArray) as &$q)
ラインで
Notice: Array to string conversion in C:\Wamp\www\servicehub.ng\find\test_array.php on line 17
explode()はすでに配列(または失敗した場合はブール値false)を返すので、その配列を配列に型キャストするのはなぜですか?あなたは本当に全文索引を使うべきである。 'instr()'の一連の文字列よりも単一の全文検索を行うほうが効率的です –
'array($ stringArray)' um what? –
@MarcB:実際には多次元配列を作成しています;-) – AbraCadaver