0

ネストされた配列の内容を出力しようとしていますが、単に「Array」を文字列として返しますが、foreachループで反復することはありません。配列はmongodbfind()から来ています。データセットは次のようになります。

User
Post_Title
Post_Content[content1,content2,content3]

私はcontent1、2、3を取得しようとしています。

私の現在のコードは次のようになります。

$results = $collection->find($query);

foreach ($results as $doc)
    {
    echo $doc['title']; //this works
    $content[] = $doc['content'];           
    print_r($content); //this prints "Array ( [0] => Array )"
    foreach ($content as $item)
        {
        echo $item;
        }
    }   

このコードは、タイトル、配列([0] =>配列)、配列の順に出力するだけです。

とても基本的なことを理解しないのはかなり愚かです。スタックオーバーフローに関するほとんどの投稿は、多次元の連想配列を参照しています。この場合、最上位の配列は連想配列ですが、コンテンツ配列にはインデックスが付けられています。

私も試しました

foreach ($doc['content'] as $item)

しかし、それは

Warning: Invalid argument supplied for foreach() 

次のように、ネストされたforeachを使用して、返された配列をもう一度繰り返してみました。

foreach ($results as $doc)
    {
    echo $doc['title']; //this works
    $content[] = $doc['content'];           
    print_r($content); //this prints "Array ( [0] => Array )"
    foreach ($content as $item)
        {
            foreach ($item as $next_item)
                {
                  echo $next_item;
                }
        echo $item;
        }
    }

2番目のforeachは無効な引数で失敗しました。どんな考えでも大歓迎です。

編集:おそらくそれは私がデータをDBに挿入する方法と関係があります。そのコードは次のようになります

$title = $_POST['list_title'];
$content[] = $_POST['list_content1'];
$content[] = $_POST['list_content2'];
$content[] = $_POST['list_content3'];

$object = new Creation();
$object->owner = "$username";
$object->title = "$title";
$object->content = "$content";
$object->insert();

これは、配列をプロパティとしてクラスに追加する適切な方法ではありませんか?

4

2 に答える 2

2

問題は、配列コンテンツの一部が配列であり、他の部分が文字列であるということです。is_array()を使用して、サブコンテンツ$docが配列であることをテストする必要があります。そうである場合は、他の配列と同じようにループし、そうでない場合は、コンテンツをエコーできます(コンテンツがどのようなものかわからない場合は、これを行う前にコンテンツタイプをテストする必要があります)。$doc

于 2013-02-21T02:38:01.183 に答える
1

問題は、データを保存しているコードにあります。次の行を置き換える必要があります

$object->content = "$content";

$object->content = $content;

于 2013-02-21T02:46:05.500 に答える