【问题标题】:Problem with explode() in PHPPHP中explode()的问题
【发布时间】:2011-05-14 01:04:28
【问题描述】:

我在 PHP 中的爆炸函数有问题。

我正在从数据库中提取一个字符串,如下所示:

  column_name
  0,2000,0,3000,1000,7000,1000,0,0,0

在将其拉入一个名为 $recordset 的对象后,我使用explode 函数从中生成一个数组...如下:

  $array = explode(",",$recordset->column_name)

但在某些方面,数组并不像我所期望的那样......

这是我回显数组时得到的结果:

     Array
     (
     [0] => 0
     [1] => 0
     [2] => 0
     [3] => 3000
     [4] => 7000
     [5] => 2000
     [6] => 1000
     [7] => 1000
     [8] => 0
     [9] => 0
     )

如您所见,我没有得到应有的值...但是,如果我从数据库中获取的字符串很短,请说:

    1000,0,1200,0

上述逻辑工作正常..

我不确定如何调试或解决这个问题..

请帮忙?

【问题讨论】:

  • var_dump($recordset->column_name); 会得到什么?
  • 你好斯蒂芬,我明白了:“0,0,0,3000,7000,2000,1000,1000,0,0"
  • 所以你得到了分解数组所代表的字符串?
  • 根据var_dump($variable)看来,PHP是在做精确的把字符串爆成数组的..
  • 在你explode()之前回显你的字符串。你可能没有从数据库中得到你所期望的。

标签: php mysql sql-order-by group-concat


【解决方案1】:

问题不在于explode()。问题是您从数据库中提取的字符串。如果这个字符串以某种方式连接,我会开始寻找那里。如果不是,请验证数据库中的字符串,或验证访问表的查询。

查看GROUP_CONCAT 的文档。您可以在语法中指定顺序。

【讨论】:

  • 是的,我在查询中使用 GROUP_CONCAT 连接字符串...您认为这可能是个问题吗?如果是,那么如果连接的字符串很短,比如 4 或 5 个逗号分隔值,为什么这不是问题..
  • 巧合的是,短的按预期顺序返回。您需要指定订单。
  • 我还有两列要连接.. 我怎样才能保持一致性,以便当我从其他两列分解数组时,我可以使用 array_combine 关联它们..?我确定我会在这里再次使用 ORDER BY 吗?正确的?如果我要订购它,我应该根据单个列订购所有三个列吗?谢谢!
  • 是的。任何专栏都可以。这取决于您的喜好。您是否尝试按它们在表中的相对位置对它们进行排序?您可以使用主键或自动增量字段,但我建议您不要这样做,因为您可能会在不知情的情况下更改顺序。我会按相关的订单列进行排序,例如日期或您为订购目的创建的任意列。
【解决方案2】:

问题不是爆炸,正如您在this codepad 中看到的那样,爆炸工作正常。

检查来自您的数据库的值,并确保它们符合您期望的顺序。

编辑: 这个值是如何在数据库中生成的?它是字段中的静态值,还是通过串联创建的?

【讨论】:

  • 我已经使用 phpMyAdmin 控制台验证了这些值的顺序:0,2000,0,3000,1000,7000,1000,0,0,0...
  • 这是它们在 phpMyAdmin 中显示的顺序,但 phpMyAdmin 可能使用不同的逻辑来获取或排列该输出。无论如何,如果您从数据库中提取值而不在 SQL 中指定顺序,则数据可以按数据库喜欢的任何顺序到达。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 2014-06-19
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
相关资源
最近更新 更多