php foreach 打印 2 次

我不明白的主题是“Hello”打印一次。另一个 Foreach“Earth”打印两次。我不明白问题出在哪里。


当我卸载 Foreach 时,问题消失了,但当我再次输入 foreach 时,问题又出现了


<div class="carousel-clip" data-jcarousel="true" style="width: 874.798px;">

<ul class="carousel-list" style="left: 0; top: 0;">

<?php foreach (YoutubeApi::getAllVideo('brhhkavxkgU') as $item): ?>

<p>Hello</p>

<?php endforeach; ?>

</ul>

</div><!-- end .carousel-clip -->



<div class="loop-content switchable-view grid-small" data-view="grid-small" data-ajaxload="1">

<div class="nag cf">

<?php foreach (YoutubeApi::getAllVideo('brhhkavxkgU') as $item): ?>

<p>world</p>

<?php endforeach; ?>

</div>

</div>

class YoutubeApi

{

public static function getAllVideo($videoId)

    {

        $url = "https://www.googleapis.com/youtube/v3/videos";

        static $all = [];

        $params = [

            'key' => '...',

            'part' => 'statistics,snippet',

            'id' => $videoId,

        ];


        $call = $url . '?' . http_build_query($params);

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $call);

        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

        curl_setopt($ch, CURLOPT_POST, false);

        curl_setopt($ch, CURLOPT_HEADER, false);

        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        curl_setopt($ch, CURLOPT_AUTOREFERER, true);

        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);

        curl_setopt($ch, CURLOPT_TIMEOUT, 20);

        curl_setopt($ch, CURLOPT_MAXREDIRS, 10);

        $output = curl_exec($ch);

        $data = NULL;

        $data = json_decode($output, true);

        $all[] = $data;

        curl_close($ch);

        return $all;

    }

}


慕哥9229398
浏览 86回答 1
1回答

千万里不及你

这是因为你的数组$all被声明为静态的,这意味着第二次运行时,第一个结果仍然存在于数组中。每次调用该函数时,它都会将新结果添加到数组中$all。如果这不是所需的行为,则每次都需要清除数组,或者不在函数中将其声明为静态。或者,如果这是所需的行为,但您想要多次显示结果,请更改调用代码以检索结果,然后对它们进行 foreach,而不是将函数调用作为显示循环的一部分。
打开App,查看更多内容
随时随地看视频慕课网APP