【问题标题】:array to string conversion error, need to explode and then implode数组到字符串转换错误,需要先爆炸再内爆
【发布时间】:2012-10-18 13:46:16
【问题描述】:

我想分解一个数组,读取每个值并将它们打印回数组中......

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

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

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

【问题讨论】:

  • 性能快速提示,如果没有必要,不要在循环内进行查询。
  • 学习如何使用 SQL 连接,您将不需要执行这种低效的查询循环:学习如何使用 MySQLi 或 PDO...然后您就不需要使用已弃用的库

标签: php mysql arrays explode implode


【解决方案1】:

$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'];

【讨论】:

  • 为什么循环在每个 id 之后没有中断?
  • foreach($categories as $value){ 将遍历数组categories 中的所有值。这不是你想要的吗?
【解决方案2】:

几个问题:

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

name_column 是一个数组。

shops_list 从未初始化。

您应该使用[] 而不是array_push

【讨论】:

    【解决方案3】:

    其他人对此嗤之以鼻,但是当您对 $name_column 进行数组推送时,由于 $name_column 是一个数组,您最终会得到:

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

    显然对此进行内爆是行不通的。

    话虽如此,您真正需要做的不是将类别映射作为逗号分隔的字符串保存在数据库中。标准数据库架构要求您使用映射表。

    • 餐桌店
    • 表格类别
    • 具有 shop_id 和 category_id 的表 shop_category_map

    【讨论】:

      【解决方案4】:

      使用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;
          }
      

      尝试其他更好的解决方案

      【讨论】:

        【解决方案5】:

        // 分解一个数组,然后分解直到数组的特定索引

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-26
          • 2016-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多