Ich habe alle Themen, die sich mit der Aufteilung von Zeichenfolgen in ein Array. Aber ich bin nicht wirklich auf meine Bedürfnisse gestoßen.Split-String in ein Array und verwenden Sie jedes Element des Arrays in einer Abfragezeichenfolge
In der Suchbox gibt ein Benutzer einen beliebigen String beliebiger Länge ein (ich kann die Länge der Wörter nicht angeben). Beim Senden sammelt das PHP-Skript den Wert als $ q.
Beispiel:
- Nehmen wir an,
$q="users typed in search query of any length."
- php jedes Wort in
$q
in eine$stringArray
wie in("users","type","in","search","etc")
aufzuspalten.for(each $stringArray as $i);
- Ausführen eine Abfrage mit jedem
$i
des Arrays Übereinstimmungen zu finden und alle Zeilen anzuzeigen, die eines$q
entsprechen: - php jedes Element des
$stringArray
wie in iterieren.
PHP CODE
<?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
}
?>
Wenn ich diesen Code ausführen, es gibt einen Fehler zurück unter:
Notice: Array to string conversion in C:\Wamp\www\servicehub.ng\find\test_array.php on line 17
explode() gibt bereits ein Array zurück (oder boolean false bei einem Fehler), also warum werden Sie dieses Array wieder in ein Array schreiben? und Sie sollten wirklich mit einem Volltextindex arbeiten. es ist viel effizienter, eine einzige Volltextsuche durchzuführen als eine lange Reihe von 'instr()' –
'array ($ stringArray)' um was? –
@MarcB: Sie erstellen tatsächlich ein mehrdimensionales Array, das schlimmer ist ;-) – AbraCadaver