2

次のコードが期待どおりに返されません。最終結果が文字列になることを期待していました:

$organizers = array_unique($organizers);     // this returns correctly
$organizers = implode(', ', $organizers);    // this returns nothing
var_dump($organizers);                        // no data appears here
exit;

array_unique()関数はデータを正しく返しています、そして私はそれが返す配列を見ることができます。まず、$organizers配列は、20文字未満の短い長さの文字列の単純な1次元配列です。$organizers問題は、10,000インデックスを超える長さである可能性があると思います。展開できる配列の長さに制限はありますか?そのための回避策はありますか?マニュアルには何も見つかりませんが、このコードを徹底的にテストしたので、エラーがオンになっているはずimplode()です。

4

3 に答える 3

1

編集:そして、何らかの理由でimplode()がまだ問題がある場合。

$organizers = array_unique($organizers);
$neworganizers = "";
for($i = 0; $i < sizeof($organizers); $i++)
{
    $neworganizers .= $organizers[$i];
    if($i != sizeof($organizers) - 1)
    {
        $neworganizers .= ", ";
    }
}

// $ neworganizersは、$ Organizersで呼び出されたときに.implode()が返すものと同等になりました

$organizers = array();
$organizers[0] = "value1";
$organizers[1] = "value2";
$organizers[2] = "value3";
$organizers[3] = "value3";
$organizers = array_unique($organizers);     // strips out last index
$organizers = implode(', ', $organizers);    // returns string of "value1, value2, value3"
echo $organizers;

これはwritecodeline.com/php/で機能するようでした

また、特殊文字を含む文字列を分解/内包しようとしたときに、古いphpビルドで問題が発生し、それらが一重引用符でカプセル化されていました。クレイジーに聞こえるかもしれませんが、一部のサーバーでは二重引用符が必要になる場合があります。

参照:古い実稼働サーバーで作業を行った個人的な経験。

于 2012-12-12T18:52:54.760 に答える
1

制限があるかどうかはわかりませんが、私の頭に浮かぶのは、配列を文字列に変換しているということです。これはPHPの問題ではないはずですが、implodeの結果に対して別の変数と呼んでみてください。

$organizers        = array_unique($organizers);     // this returns correctly
$organizers_string = implode(', ', $organizers);    // this returns nothing

// This gives it a different space 
于 2012-12-12T19:27:03.353 に答える
0

私は明白なことを言っているとは思いたくないのですが、implodeは引数として文字列だけを取るのではありませんか?多分それはもっとこのようなものでなければなりません...

$organizers = array_unique($organizers);

//I'm guessing what you wanted was an array of arrays?
$neworganizers = array();
for($i = 0; $i < sizeof($organizers); $i++)
{
    $neworganizers[$i] = implode(", ", $organizers);
}
print_r($neworganizers);
于 2012-12-12T18:32:15.350 に答える