array_push创建的数组行为奇怪。尝试输出关联数组值时返回数组的第一个字母或“A”

时间:2011-09-14 00:34:22

标签: php arrays

我试图使用foreach输出下面的数组。我已经通过array_push()创建了这个数组,基于preg_match if / else。

Array (
    [0] => Array (
        [date] => 
        [clickurl] => some data
        [url] => some data
        [dispurl] => some Data...
        [title] => Transformers: Revenge of the Fallen : Reviews
        [abstract] => "Transformers: Revenge of the Fallen" is a horrible experience of unbearable length, briefly punctuated by three or four amusing moments.
    )

    [1] => Array (
        [date] => 
        [clickurl] => some data
        [url] => some data
        [dispurl] => some Data...
        [title] => Transformers : Reviews
        [abstract] => After a string of bad-to-mediocre films, director Michael Bay scores with blockbuster battling robots in "Transformers."
    )
)

尝试输出数组时:

foreach ($reviewArr as $review) {
    echo($review['clickurl']. '<br/><br/>');
}

输出为“A”,它是上面数组开头的Array的第一个字母。这与使用$review[0];

的结果相同

使用时:

foreach ($reviewArr as $review) {
    echo($review. '<br/><br/>');
}

输出是:

Array ( 
    [date] => 
    [clickurl] => some data 
    [url] => some data
    [dispurl] => some data... 
    [title] => Transformers : Reviews 
    [abstract] => After a string of bad-to-mediocre films, director Michael Bay scores with blockbuster battling robots in "Transformers." 
) 

我不确定为什么会这样。任何帮助将不胜感激。

谢谢!

UPDATE =

这是我在下面解析的原始数组,分成两个不同的数组。

Array
    (
[bossresponse] => Array
    (
        [responsecode] => 200
        [web] => Array
            (
                [start] => 0
                [count] => 14
                [totalresults] => 14
                [results] => Array
                    (
                        [0] => Array
                            (
                                [date] => 
                                [clickurl] => http://url.com/1
                                [url] => http://url.com/1
                                [dispurl] => http://url.com/1...
                                [title] => Title of Content 1
                                [abstract] => This is the summary, This is the summary,    This is the summary, ...
                            )

                        [1] => Array
                            (
                                [date] => 
                                [clickurl] => http://url.com/2
                                [url] => http://url.com/2
                                [dispurl] => http://url.com/2...
                                [title] => Title of Content 2
                                [abstract] => This is the summary, This is the summary,  This is the summary, ...
                            )
                    )

              )

       )

)

这就是我设置$ reviewArr []的方式。

foreach ($results['bossresponse']['web']['results'] as $key => $result) {
                $url = $result['clickurl'];
                $title = $result['title'];
                $abstract = $result['abstract'];
                $resultItem = print_r($results['bossresponse']['web']['results'][$key], true);
                if (preg_match ("/reviews/i", "$url")) {
                    array_push($reviewArr, "$resultItem");
                } else {
                    array_push($resultsArr, "$resultItem");
                }
            }

更新#2 -

我感谢@fabio,我只是设置一个上面有$resultItem的字符串。如何创建多维数组?我如何将其构建为数组 - 我的所有尝试都返回错误或字符串。

 Array
                    (
                        [0] => Array
                            (
                                [date] => 
                                [clickurl] => http://url.com/1
                                [url] => http://url.com/1
                                [dispurl] => http://url.com/1...
                                [title] => Title of Content 1
                                [abstract] => This is the summary, This is the summary,    This is the summary, ...
                            )

                        [1] => Array
                            (
                                [date] => 
                                [clickurl] => http://url.com/2
                                [url] => http://url.com/2
                                [dispurl] => http://url.com/2...
                                [title] => Title of Content 2
                                [abstract] => This is the summary, This is the summary,  This is the summary, ...
                            )
                    )

3 个答案:

答案 0 :(得分:0)

我不知道你是如何在阵列上推送物品的,但我认为这可以解决问题:

foreach ($reviewArr as $index=>$review) {
    echo($review['clickurl']. '<br/><br/>');
}

答案 1 :(得分:0)

变化:

foreach ($results['bossresponse']['web']['results'] as $key => $result) {
    $url = $result['clickurl'];
    $title = $result['title'];
    $abstract = $result['abstract'];
    $resultItem = print_r($results['bossresponse']['web']['results'][$key], true);
    if (preg_match ("/reviews/i", "$url")) {
        array_push($reviewArr, "$resultItem");
    } else {
        array_push($resultsArr, "$resultItem");
    }
}

为:

foreach ($results['bossresponse']['web']['results'] as $key => $result) {
    if (preg_match ("/reviews/i", $result['clickurl'])) {
        $reviewArr[] = $result;
    } else {
        $resultsArr[] = $result;
    }
}

答案 2 :(得分:0)

出于奇怪的原因,您使用print_r ???

的返回值填充数组
// this will return a string
$resultItem = print_r($results['bossresponse']['web']['results'][$key], true);

所以这就是你行为的原因:你打印的是print_r返回值的第一个字符,它是$results[...][...]数组的字符串表示形式。

自己尝试

$foo = "Hello world";
echo $foo[0]; // output H

P.S。 echo($review. '<br/><br/>');将输出整个字符串,即print_r输出。