将数字数组键更改为$ variable

时间:2017-11-03 22:21:45

标签: php

我想知道是否有人可以帮助解决我遇到的概念问题,或者是否有更好的方法。 基本上我通过搜索栏在数据库中搜索一系列术语。 我有一个循环遍历每个术语的函数,然后将其用于搜索。它将所有内容放在一个数组中,然后返回数组,然后将其处理成一个表。 搜索工作正常,我插入条款,它循环通过他们将行推入数组。现在,因为我正在推进不同的数组,我所拥有的父数组具有索引键,我想将其更改为术语的键,并且在数组中有两个其他数组1用于结果数量,另一个用于结果。

// Search index php

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Untitled Document</title>
</head>

<body>
    <div id="search">
    <form id= "search" action="searchresults.php" method="POST">
    <input type="text" name="txtsearch" size="30" id="txtsearch">
    <input type="submit" name="srchbtn" id="srchbtn">Search</button>
        </form>
</body>
</html>
//Search PHP

<?php
include_once "iud.php";

$arrayval = array();

if(isset($_POST['txtsearch'])){
    $search=$_POST['txtsearch'];
}else{
    $search = '';
}
$search1 = explode(" ", $search);

array_push($arrayval, $search1);
$combined = array();
foreach ($arrayval as $val){
    $orIndex = checkOr($val);
    if(empty($orIndex)){
        $valcntr = count($val);
        $results = getResults($val);
        print_r($results);
    }
}

function getResults($array){
    include_once "iud.php";
    $db = connectDatabase();
    $totalResults = array();
    $length = count($array);
    for ($i = 0; $i < $length; $i++){
        $outputDisplay = "";     
        $myrowcount = 0;
        $sql_statement  = "SELECT userid, username, firstname, lastname ";
        //, congroup, cattype, company, position, email, website, phone, mphone, wphone, fax, add1, add2, city, state, zip, country, reference, entrydate, enteredby, notes ";
        $sql_statement .= "FROM userlist ";
        $sql_statement .= "WHERE (firstname LIKE '%$array[$i]%' or lastname LIKE '%$array[$i]%')"; 
        $sql_statement .= "ORDER BY lastname, firstname";
        $sqlResults = selectResults($db, $sql_statement);

        $error_or_rows = $sqlResults['resultNum'];

        if (substr($error_or_rows, 0 , 5) == 'ERROR')
        {
            $outputDisplay .= "<br />Error on DB";
            $outputDisplay .= $error_or_rows;
        } else {

            array_push($totalResults, $sqlResults);
            $arraySize = $error_or_rows;

        }

    }
    return ($totalResults);
}

function buildTable($totalResults){
    include_once "iud.php";
    $outputDisplay = "";
    $outputDisplay .= '<div id="resultstable">';
    $outputDisplay .= '<ul id="results">';
    $myrowcount = 0;
    for ($i=0; $i < count($totalResults); $i++)
    {
        $myrowcount++;
        $contactid = $totalResults[$i]['userid'];
        $firstname = $totalResults[$i]['firstname'];
        $lastname = $totalResults[$i]['lastname'];
        $pcat      = $totalResults[$i]['username'];

        $outputDisplay .= '<li id='.$contactid.' class="indRes" ';
        $outputDisplay .= 'name="'.$contactid.'" >';
        $outputDisplay .= '<span style="font-size:10px;cursor:pointer" onclick="getContactsToForm();">';
        $outputDisplay .= '<h3>'.$firstname.' ' .$lastname. '</h3>';

        $outputDisplay .= '</span>';
        $outputDisplay .= '</li>';
    }
    $outputDisplay .= '</ul>';
    $outputDisplay .= "</div>";

    return $outputDisplay;
}

function checkOr($searchArray){
    if (in_array("OR",$searchArray)){
        $orPos = array_search("OR", $searchArray);
        if (!empty($orPos)){ 
            $surrVal = "";
            $surrVal = --$orPos;
            $orValArray = array();
            array_push($orValArray,$searchArray[$surrVal]);
            $surrVal = $orPos+2;
            array_push($orValArray,$searchArray[$surrVal]);
            return $orValArray;
        }           
    }
}

?>
//common functinos IUD 
<?php

function connectDatabase()
{
    $db = mysqli_connect('localhost','root','');
    if (!$db)
    {
        print "<h1>Unable to Connect to mysqli</h1>";
    }
    $dbname = 'test';
    $btest = mysqli_select_db($db, $dbname);
    if (!$btest)
    {
        print "<h1>Unable to Select the Database</h1>";
    }
    return $db;
}

function selectResults($db, $statement)
{
    $output = "";
    $outputArray = array();

    $db = connectDatabase();

    if ($db)
    {
        $result = mysqli_query($db, $statement);

        if (!$result) {
            $output .= "ERROR";
            $output .= "<br /><font color=red>mysqli No: ".mysqli_errno();
            $output .= "<br />mysqli Error: ".mysqli_error();
            $output .= "<br />SQL Statement: ".$statement;
            $output .= "<br />mysqli Affected Rows: ".mysqli_affected_rows()."</font><br />";

            array_push($outputArray, $output);

        } else {
            $numresults = mysqli_num_rows($result);
            $outputArray['resultNum'] =  $numresults;
            for ($i = 0; $i < $numresults; $i++)
            {
                $row = mysqli_fetch_array($result);
                $outputArray["rowArray"] = $row;
            }
        }
    } else {
        array_push($outputArray, 'ERROR-No DB Connection');
    }
    return $outputArray;
}

function iduResults($db, $statement)
{
    $output = "";
    $outputArray = array();

    $db = connectDatabase();
    if ($db)
    {
        $result = mysqli_query($db, $statement);

        if (!$result) {
            $output .= "ERROR";
            $output .= "<br /><font color=red>mysqli No: ".mysqli_errno();
            $output .= "<br />mysqli Error: ".mysqli_error();
            $output .= "<br />SQL Statement: ".$statement;
            $output .= "<br />mysqli Affected Rows: ".mysqli_affected_rows()."</font><br />";

        } else {
            $output = mysqli_affected_rows();
        }
    } else {
        $output =  'ERROR-No DB Connection';
    }
    return $output;
}

?>

我的搜索返回一个数组,打印时看起来像这样:

Array(
     [0]=>Array
               (
                [resultNum]=>1
                [rowArray]=>Array(
                                  [0]=>1
                                  [userid]=>1
                                    etc
                                     )
                  )
     [1]=>Array
               (
                [resultNum]=>1
                [rowArray]=>Array(
                                  [0]=>2
                                  [userid]=>2
                                    etc
                                     )
                  )

我想将两个外部数组的键[0],[1]放入通过getResults($array)函数循环中使用的搜索项中。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

更改

array_push($totalResults, $sqlResults);

为:

$totalResults[$array[$i]] = $sqlResults;

使其成为关联数组而不是索引数组。

P.S。您应该学会使用foreach循环数组元素,并使用预准备语句来阻止SQL注入。

此外,selectResults()仅返回查询的最后一行。它应该是:

   } else {
        $numresults = mysqli_num_rows($result);
        $outputArray['resultNum'] =  $numresults;
        $outputArray['rowArray'] = array();
        for ($i = 0; $i < $numresults; $i++)
        {
            $row = mysqli_fetch_array($result);
            array_push($outputArray["rowArray"], $row);
        }

这样它每次都会返回所有行而不是覆盖rowArray