2012-10-18 120 views
2

我想爆炸一個數組,讀取每個值,並打印出來回陣列中的...數組字符串轉換錯誤,需要爆炸,然後爆

我不明白的地方我收到錯誤的。請幫me..this是我的代碼..

我得到一個數組到字符串轉換錯誤

$query="SELECT categories FROM shops"; 
$result = mysql_query($query); 
while($column = mysql_fetch_assoc($result)){ 
    $categories=explode(",",$column['categories']); 
    foreach($categories as $value){ 
     $new_query="SELECT name from categories where id='$value'"; 
     $name = mysql_query($new_query);  
     $name_column= mysql_fetch_assoc($name); 
     array_push($shops_list,$name_column); 

    } 
} 
echo implode(",",$shops_list); 
+0

業績快速提示的特定指數,不做裏面查詢如果不需要,則循環。 – Tom

+2

瞭解如何使用SQL連接,並且您不需要執行此低效的查詢循環:學習如何使用MySQLi或PDO以及...然後您將不需要使用已棄用的庫 –

回答

2

$shop_list沒有定義,在此行中使用它之前array_push($shops_list,$name_column);。而且,這條線

array_push($shops_list,$name_column); 

需求是,如你需要提及的關鍵name

array_push($shops_list,$name_column['name']); //or better 
    $shop_list[] = $name_column['name']; 
+0

爲什麼循環沒有中斷每個ID後? – user1694724

+0

'foreach($ categories as $ value){'將遍歷數組'categories'中的所有值。這不是你想要的嗎? –

1

幾個問題:

$name_column = mysql_fetch_assoc($name); 
$name_column = $name_column['name']; 

name_column是一個數組。

shops_list從不初始化。您可以使用[]而不是array_push

1

其他的人打它的鼻子,但是當你做了$ name_column您陣推,因爲$ name_column是一個數組,所以你最終得到:

Array 
(
    [0] => Array 
     (
      [name] => boo 
     ) 
) 

很明顯,做一個implode是行不通的。

這就是說,你真正需要做的是不把你的分類映射保存爲數據庫中逗號分隔的字符串。標準數據庫架構規定您使用映射表。

  • 錶店
  • 表類別
  • 表shop_category_map已經shop_id和CATEGORY_ID
1

使用group_concat檢索值。並在得到結果後,直接使用它們進行搜索。像

$result_array = explode(",",$row['category']); 

    foreach($result_array as $ra) 
    { 
    //sql command. fetch here. 
    $new_query="SELECT name from categories where id='$value'"; 
    $name = mysql_query($new_query);  
    $name_column= mysql_fetch_assoc($name); 
    $shops_list[] = $name_column; 
    } 

嘗試別的去更好的解決方案

1

//爆炸數組,然後破滅,直到陣列

$a = '192.168.3.250'; 
$b = explode('.',$a); 
$ar = array(); 

for($i=0;$i<=2;$i++) 
{ 
    array_push($ar,$b[$i]); 
} 

$C = implode($ar,'.'); 
print_r($C);