2016-11-26 86 views
0

我搞砸了一点与我的PHP,只是想得到一些帮助。此刻,我的代码将从下拉框中选择的值,并将这些值与其相应的行一起放入表格中,然后放入3D数组中。但是,它只需要是2D数组,但我不知道如何摆脱3D数组的第一维。 PHP代码:为什么我的阵列是3D而不是2D?

<?php 
function startmatching(){ 
    define("DB_DSN", "mysql:host=localhost;dbname=FoodMatching"); 
    define("DB_USERNAME", "root"); 
    define("DB_PASSWORD", ""); 

    // define the empty array to be filled from db 

    $results = array(); 
    // any other php tasks that dont needthe ingcats 
    // store sql 

    $IngName = $_POST['IngredientName']; 
    $IngCounter=0; 
    while($IngCounter<count($IngName)){ 
     $sSQL = "SELECT IngID, IngName, Texture, Colour, Bitter, Sweet, Sour, Salty, Umami FROM IngredientCharacteristics WHERE IngName='$IngName[$IngCounter]'"; 
     // create an instance of the connection 
     $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
     // prepare 
     $st = $conn->prepare($sSQL); 
     // execute the connection 
     $st->execute(); 
     $counter=0; 
     // while myslq has rows loop over them and store 
     while($row = $st->fetch()){ 
      $results[$counter][] = $row; 
      $counter++; 
     } 
     $IngCounter++; 
    } 
    print_r($results); 
} 
?> 

HTML:

<form method='post' role="form" autocomplete="off"> 

    <div class="entry input-group col-xs-3"> 
     <?php //this function takes the ing id and ingname from ingredientcharacteristics table. 
        // if there are results stored create the select and loop over 
        if(!empty($aIngList)){ 
         echo "<span class='form-control' style = 'float:left; font-size: 20px;font-family:'Helvetica Neue' ><select name = 'IngredientName[]' class = 'custom-dropdown__select custom-dropdown__select--white'>"; 
         //class = 'custom-dropdown custom-dropdown--white' 
         echo "<option value='' default >Choose an Ingredient</option>"; 
         foreach ($aIngList as $iIngID => $sIngName) { 
          echo "<option value='".$sIngName."' >".$sIngName."</option>"; 
         } 
         echo "</select></span>"; 
        }else{ 
         echo "<p>No results available!</p>"; 
        } 
       ?> 

     <span class="input-group-btn"> 
      <button class="btn btn-success btn-add" type="button"> 
       <span class="glyphicon glyphicon-plus"></span> 
      </button> 
      <button type="submit" class="hidden" name="startmatch" value ="startmatch" id="submit-form"></button> 
     </span> 
    </div> 


</form> 

1.4.3 $结果给出如下:

Array 

    (
     [0] =&gt; Array 
      (
       [0] =&gt; Array 
        (
         [IngID] =&gt; 2 
         [0] =&gt; 2 
         [IngName] =&gt; Apples Fresh 
         [1] =&gt; Apples Fresh 
         [Texture] =&gt; 4 
         [2] =&gt; 4 
         [Colour] =&gt; 8 
         [3] =&gt; 8 
         [Bitter] =&gt; 7 
         [4] =&gt; 7 
         [Sweet] =&gt; 3 
         [5] =&gt; 3 
         [Sour] =&gt; 4 
         [6] =&gt; 4 
         [Salty] =&gt; 8 
         [7] =&gt; 8 
         [Umami] =&gt; 9 
         [8] =&gt; 9 
        ) 

       [1] =&gt; Array 
        (
         [IngID] =&gt; 2 
         [0] =&gt; 2 
         [IngName] =&gt; Apples Fresh 
         [1] =&gt; Apples Fresh 
         [Texture] =&gt; 4 
         [2] =&gt; 4 
         [Colour] =&gt; 8 
         [3] =&gt; 8 
         [Bitter] =&gt; 7 
         [4] =&gt; 7 
         [Sweet] =&gt; 3 
         [5] =&gt; 3 
         [Sour] =&gt; 4 
         [6] =&gt; 4 
         [Salty] =&gt; 8 
         [7] =&gt; 8 
         [Umami] =&gt; 9 
         [8] =&gt; 9 
        ) 

      ) 

    ) 

我不知道如何摆脱多余的阵列,因此任何帮助将不胜感激:)

+0

此行'$ results [$ counter] [] = $ row;' –

+0

您的脚本存在[SQL注入攻击]的风险(http://stackoverflow.com/questions/60174/how-cani-i-预防SQL注入在PHP) 看看发生了什么[小Bobby表](http://bobby-tables.com/)即使 [如果你逃避投入,它不安全!]( http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) 使用[prepared参数化语句](http://php.net/manual/en/ mysqli.quickstart.prepared-statements.php) – RiggsFolly

+0

'$ results [$ counter] [] = $ row;'应该是'$ results [] = $ row;'$ counter'变量是完全不必要的 – RiggsFolly

回答

0

问题是这条线:

$results[$counter][] = $row; 

的解决方案是将其更改为

$results[] = $row; 

PHP会自动追加到$row意味着$results,你不需要你$counter可变的。