0

だから私は Google の YouTube API で遊んでいて、ユーザーからのすべてのサブスクリプションを返したいと思っています。
サブスクリプション (最大 50) を取得し、ユーザーが 50 を超えるサブスクリプションを持っている場合はそれをさらに取得するためにそれを呼び出すこの関数を作成しました。

しかし、各関数呼び出しから配列をマージする方法がわかりません。(最後の while ループを参照してください)。
現在は機能しているため、新しい配列は古い配列を上書きするだけですが、配列をメイン配列に追加して返すことを試みましたが、配列を自分自身に配置するだけです。

foreach ループは、次のような配列を返します。

Array
(
    [0] => Array
        (
            [channelName] => break
            [channelLink] => https://www.youtube.com/channel/UClmmbesFjIzJAp8NQCtt8dQ
        )

    [1] => Array
        (
            [channelName] => kn0thing
            [channelLink] => https://www.youtube.com/channel/UClmmbesFjIzJAp8NQCtt8dQ
        )

    [2] => Array
        (
            [channelName] => EpicMealTime
            [channelLink] => https://www.youtube.com/channel/UClmmbesFjIzJAp8NQCtt8dQ
        )
)

したがって、問題は while ループです。アイデアはありますか?

// Get an array with videos from a certain user
function getUserSubscriptions($username = false, $startIndex = 1, $maxResults = 50) {
    // if username is not set
    if(!$username) return false;

    // get users 50 first subscriptions
    // Use start-index to get the rest
    $ch = curl_init('https://gdata.youtube.com/feeds/api/users/'.$username.'/subscriptions?v=2&max-results='.$maxResults.'&start-index='.$startIndex);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $subscriptionsXML = curl_exec($ch);
    curl_close($ch);

    // convert xml to array
    $subscriptionsArray = XMLtoArray($subscriptionsXML);

    // Ge total number of subscriptions
    $totalNumberOfSubscriptions = $subscriptionsArray['FEED']['OPENSEARCH:TOTALRESULTS'];

    // Parse array and clean it up
    $s = 0;
    $l = 0;
    foreach($subscriptionsArray['FEED']['ENTRY'] as $subscriptionArray) {

        // get link
        foreach($subscriptionArray['LINK'] as $channelLinks) {
            $channelLinkArray[$l] = $channelLinks;
            $l++;
        }
        // save all into a more beautiful array and return it
        $subscription[$s]['channelName'] = $subscriptionArray['YT:USERNAME']['DISPLAY'];
        $subscription[$s]['channelLink'] = $channelLinkArray[1]['HREF'];
        $s++;
    }

    // if we did not get all subscriptions, call the function again
    // but this time increase the startIndex
    while($totalNumberOfSubscriptions >= $startIndex) {
        $startIndex = $startIndex+$maxResults;
        $subscription = getUserSubscriptions($username, $startIndex);
    }
    return $subscription;
}
4

1 に答える 1

2

問題は、再帰呼び出しを行っているときに発生するようです。

$subscription = getUserSubscriptions($username, $startIndex);

これは、返された結果でサブスクリプション配列を上書きしているように見えるため、最後に構築された配列のみを取得します。代わりに、配列をマージしてみてください。

$subscription = array_merge( $subscription, getUserSubscriptions($username, $startIndex) );

すべてのインデックスが数値の場合、これによりすべての要素が配列の末尾に追加されます。参照: http://php.net/manual/en/function.array-merge.php

于 2012-04-11T22:21:25.247 に答える