2014-09-04 63 views
0

我最近創建了一個帶有複選框的搜索功能,用於查詢提交的複選框值並將這些值返回到表中。 然而問題是某些複選框值(在數據庫中)被序列化。當我在每個複選框值的foreach中顯示查詢結果變量時,它將返回序列化字符。顯然,我想只顯示沒有怪異字符的字符串。反序列化查詢(數組)數據不起作用

原來的代碼,其中返回整個序列化的字符如下:

if(count($tmp)>0){ 
    for($i=0;$i<count($tmp);$i++){ 
     echo "<tr>"; 
      foreach($tmp[$i] as $key=>$value){ 

       echo"<td>" . $value . "</td>";   
      }   
     echo "</tr>"; 
    } 
} 
echo '</table>'; 

所以只顯示數據庫值的字符串我try'd使用反序列化功能($ tmp就是存儲查詢結果的變量)。然而有幾個問題這一點,即:

  1. 回聲犯規與反序列化
  2. 工作數據庫和查詢也可以返回非序列化的數據(所以$ TMP變量可以包含一個序列化值與怪異。字符和b。只是一個非序列化的普通字符串)。
  3. 由於反序列化功能也得到了「正常」的字符串,這些法線trings將被輸出作爲空白..
  4. 出於某種原因,陣列/序列化的數據(使用的print_r)的輸出中顯示沒有字符串,而是整個數組名稱,如下所示:Array ([0] => [1] => Netherlands)

下面的代碼是如何try'd反序列化數據:

if(count($tmp)>0){ 
     for($i=0;$i<count($tmp);$i++){ 
      echo "<tr>"; 
       foreach($tmp[$i] as $key=>$value){    

       echo "<td>"; 
       $b=unserialize($value); 
       print_r($b); 
       echo "</td>";             
       }   
      echo "</tr>"; 
     } 
    } 
    echo '</table>'; 

雖然,如前面所說的,上面的代碼顯示整個陣列名稱和數據庫的「正常」的串也被查詢的內容顯示爲空白。

那麼如何解決這個問題呢?

預先感謝您

回答

0

PHP的反序列化可以返回一些事情,包括數組這是你的情況。這樣做

foreach($tmp[$i] as $key=>$value){    
echo "<td>"; 
$b=unserialize($value); 
    if(is_array($b)){ 
    //this assumes your array is always like this Array ([0] => [1] => Netherlands) 
    echo $b[1]; 
    } 
    else{ 
    echo $value; 
    } 
echo "</td>";             
}  
+0

啊,太棒了謝謝。然而,[1]並不總是相同的,也可能是數組包含2個值(或更多),那麼它將是Array([0] => [1] => Netherlands),Array([0 ] => [2] => America),Array([0] => [3] => England)。因此,[]是一個可以改變的值(如果只選擇了一個選項,無論名稱是什麼,該選項總是[1],儘管用戶選擇多於1個選項時,[2],[ 3]將被分配(選擇列表是按字母順序排列的,所以如果選擇了所有選項,字母表的第一個字母將爲[1]依此類推)。 – Nicolas 2014-09-04 14:21:25

+0

您可以使用array_filter($ b)刪除數組中的空值。 – 2014-09-04 14:25:32

+0

然後,如果你的陣列像你在上面的評論中說的那樣,你總是會使用$ b [0] – 2014-09-04 14:28:06