1

配列を文字列としてエコーすることに問題があります。以前のコードは次のようになります。

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

したがって、この関数に対して foreach を実行すると、2013年と2014年が正しく返されますが、そのようにすることはできないので、次のようにしました。

echo implode(', ', order_count_for_year($us_id));

そして、それは機能しません、それは戻ります: array, array、なぜ機能しないのかわかりません。アプリケーション内のさまざまな配列では機能しますが、これでは機能しません...

最後に、私はそのようなでたらめを思いつきました:

$some_variable = '';
foreach(order_count_for_year($us_id) as $test) { $some_variable .= $test['YEAR(`date_posted`)'] . ', '; }
echo $some_variable;

それは機能しますが、それほど複雑にしたくありませんでした。これは良い考えだとは思いません。なぜ内破で動作しないのか、またはループなしで動作させる方法を知っている人はいますか?

内破に変数を使用する必要があるという回答を投稿しないでください。それは必要ありません。また、テストしても機能しません。

4

2 に答える 2

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 を付けてください。

于 2013-09-13T20:14:59.997 に答える