数组到字符串转换错误,需要爆炸然后内爆

时间:2012-10-18 13:46:16

标签: php mysql arrays explode implode

我想爆炸一个数组,读取每个值并将它们打印回数组......

我不明白我哪里出错了。请帮帮我..这是我的代码..

我得到一个数组到字符串转换错误

$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);

5 个答案:

答案 0 :(得分: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'];

答案 1 :(得分:1)

几个问题:

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

name_column是一个数组。

shops_list永远不会被初始化。

您应该使用[]代替array_push

答案 2 :(得分:1)

其他人嗤之以鼻,但当你的阵列推送$ name_column时,因为$ name_column是一个数组,你最终得到:

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

显然,对此进行内爆将无效。

话虽这么说,你真正需要做的是不要将你的类别映射保留为数据库中逗号分隔的字符串。标准数据库架构要求您使用映射表。

  • 餐馆
  • 表类别
  • 具有shop_id和category_id的table shop_category_map

答案 3 :(得分: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;
    }

尝试其他方法寻求更好的解决方案

答案 4 :(得分: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);