2010-11-22 19 views
2

PHPのexplode関数に問題があります。PHPのexplode()の問題

次のように私は、データベースから文字列を引っ張っています:

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

を、私はそれから配列を作るために爆発する機能を使用しています$レコードセットと呼ばれるオブジェクトにこれを引っ張った後...と次の:

$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 

上記のロジックが正常に動作します。 。

私はデバッグや、この問題を解決するかどうかはわかりません。..

してください、助けて?

+7

もしあなたが 'var_dump($ recordset-> column_name);'? – Stephen

+0

こんにちはスティーブン、私はこれを得ます: "0,0,0,3000,7000,2000,1000,1000,0,0" –

+5

これで、分解された配列が表す文字列を正確に取得できますか? – Stephen

答えて

5

問題はexplode()ではありません。問題は、データベースから引き出している文字列です。この文字列が何らかの形で連結されていれば、そこから探し始めます。そうでない場合は、データベース内の文字列を確認するか、テーブルにアクセスするクエリを確認してください。

GROUP_CONCATのドキュメントをご覧ください。構文で順序を指定できます。

+0

はい、私はクエリでGROUP_CONCATを使って文字列を連結しています...それは問題かもしれないと思いますか?もしそうなら、連結された文字列が短く、例えばカンマ区切りの値が4または5であれば、これは問題ではないのですか? –

+3

短いものが予想通りに返されています。注文を指定する必要があります。 – Stephen

+0

私は2つの列を連結しています..他の2つの列から配列を爆発させると、array_combine ..を使ってそれらを関連付けることができるように、どうすれば一貫性を維持できますか?私はここでもORDER BYを使うと思いますか?右?私がそれを注文しているならば、私は3つのcoloumnsを1つの列に基づいて注文するべきですか?ありがとう! –

1

問題は爆発しません。this codepadでわかるように、爆発が正しく機能しています。

DBからの値を確認し、期待どおりの順序であることを確認してください。

編集: この値はどのようにDBに生成されますか?それはフィールド内の静的な値ですか、または連結から作成されていますか?

+0

0,2000,0,3000,1000,7000,1000,0,0,0のphpMyAdminコンソールを使用して値を確認しました... –

+0

これは連結後に作成されています... –

+1

これはそれらはphpMyAdminに表示されますが、phpMyAdminは別のロジックを使用してその出力を取得または整理している可能性があります。とにかく、SQLで注文を指定せずにデータベースから値を引き出すと、データはデータベースが好きな順序で到着することができます。 – Hammerite