我有一个从MySQL获得的数据集,它是这样的:
Array
(
[0] => Array
(
[views] => 14
[timestamp] => 06/04
[views_scaled] => 4.9295774647887
[unix_time] => 1239022177
)
[1] => Array
(
[views] => 1
[timestamp] => 19/04
[views_scaled] => 0.35211267605634
[unix_time] => 1240194544
)
...
...
...
) 1
字符串
(it的后处理,'timestamp'在此之前确实是一个时间戳,但这并不重要)
数组存储在$results
上,在我的代码中间,我做了这样的事情:
$results = array_merge($results, $new_days);
$a = $results;
foreach ($results as $row)
{
$unix_time[] = $row['unix_time'];
}
$b = $results;
型
问题:$a
和$b
都是不同的。第一个显示的是它应该显示的数组,第二个有相同的count()
,但它的第四个元素是最后一个的重复。据我所知,我没有通过引用传递任何东西,所以$results
不意味着改变(也许是指针,但不是它的内容)。我在Mac OS X 10.5.2上使用PHP 5.2.4。
**一个明显的问题:**这是某种预期的行为,一个bug还是我在这里做错了什么?(请不要使用布尔答案;)
**编辑:**感谢大家的关注,我不知道我应该发布多少额外的代码,我之前没有做太多,除了从DB中检索数据和foreach
来解析时间戳并为缺失的日子构建一个新数组($new_days
)。这一切都很好。
这段代码是我之前发布的代码:
array_multisort($unix_time, SORT_ASC, $results);
$days = implode('|', array_pluck('timestamp', $results));
$views = implode('|', array_pluck('views', $results));
$views_scaled = implode(',', array_pluck('views_scaled', $results));
型
(array_pluck()
是一个自定义函数,用于从典型的DB转储数据集中的列生成数组)
**编辑2:**再次感谢,这里是the full snippet和$results
数组$a
和$b
的输出(也在代码的注解中引用)。
6条答案
按热度按时间xnifntxz1#
检查你的代码片段,非常快(刚要离开办公室),这可能是在你的(第一个)循环中通过引用传递的东西。尝试使用normal by value并将所有内容存储到一个新的结果数组中。(将消除任何可能正在发生的奥秘).也可以尝试使第二个foreach中的第二个$行一个不同的名称.. beats me -再多看一眼就说不出了。
这一行和后面的代码块也不会执行
字符串
可能与此有关,新的日子永远不会填补,合并可能会做一些时髦的事情。
我不认为这是答案,但我想这是一个开始。
xkftehaa2#
问题出在第一个foreach循环上,前面已经提到过。
原因是...
字符串
我希望这是有意义的!基本上倒数第二个值将被重复,因为最后一个值在第二次循环中被替换。
vd8tlhqk3#
我无法想象这是什么行为。这里一定有其他的东西。你能把行为隔离到一段足够小的代码中吗?如果你这样做,bug可能会变得很明显。
gkn4icbw4#
我也会说还有别的事。
我这样写道:
字符串
得到:
型
我现在用的是PHP 5.2.8
tktrz96b5#
我认为你的问题是结果集不是一个真正的数组,它是一个mysql resultset对象,它的行为像一个数组。
我认为如果你遍历每一行,将其分配给一个新的数组,然后进行合并,它会正常工作。
dwthyt8l6#
如果我没记错的话,这是一个PHP bug,我不知 prop 体细节,但是数组和引用已经被搞砸了。