我有一个echo'ing数组作为字符串的问题,我以前的代码看起来像这样:
$years = array('2013', '2014');
foreach($years as $year) {
//do rest of the code
我认为现在是时候让其余的代码更加动态和“不干涉”了,所以我准备了一些从数据库中选择的小功能,而不是在新的一年到来时手动输入。
这是年份摘录的代码:
function order_count_for_year($us_id) {
$orders_for_year = array();
$query = "SELECT DISTINCT YEAR(`date_posted`) FROM `orders` WHERE `us_id` = {$us_id}";
$query = mysql_query($query);
while($row = mysql_fetch_assoc($query)) {
$orders_for_year[] = $row;
}
return $orders_for_year;
}
所以,如果我为这个功能做预告,它会在2013年和2014年返回核心,但我不能这样做,所以我这样做了:
echo implode(', ', order_count_for_year($us_id));
它不起作用,它返回:array, array
,我不明白为什么它不起作用,它适用于apliacation中的不同数组但不适用于此...
最后我想出了这样的废话:
$some_variable = '';
foreach(order_count_for_year($us_id) as $test) { $some_variable .= $test['YEAR(`date_posted`)'] . ', '; }
echo $some_variable;
它有效,但我不想让它变得那么复杂,我不觉得这是个好主意。任何人都知道为什么它不与implode一起工作,或者如何让它在没有循环的情况下工作?
请不要发布我必须使用变量进行内爆的答案,不需要它,即使 - 我测试了它,也不起作用。
答案 0 :(得分:3)
那是因为你每次都在向数组添加$row
,这本身就是一个数组。
您可能对mysql_fetch_row
感兴趣:
while($row = mysql_fetch_row($query)) $orders_for_year[] = $row[0];
有了这个,调用哪个列并不重要。
或者,使用别名:
mysql_query("SELECT DISTINCT YEAR(`date_posted`) AS `year` FROM ...
然后您可以在关联数组中以$row['year']
的形式访问它。
另外,在列名称周围实际使用反引号时会有+1。
答案 1 :(得分:1)
如果你不知道你正在处理的数据是什么,有一个简单的方法:使用var_dump($variable)
。
如果使用,你会立即发现你没有一个内部有两个年份字符串的数组,但是有两层数组。