2017-12-01 14 views
0

配列を作成しようとしています(存在していない場合)。配列の作成とプッシュ

foreach($playlist->items as $item) { 
     $str = $item->snippet->title; 
     $id = $item->snippet->resourceId->videoId; 

     $substring = substr($str, 0, 5); 
     $substring = strtolower($substring); 

      if (is_array($substring)) { 
       array_push($substring, $id); 
      } 
      else { 
       $substring = array(); 
       array_push($substring, $id); 
      } 
     array_push($artists, $substring); 
    } 

私はYouTubeのプレイリストから取得したデータを反復していますので、私は「タイトル」を保持foreachの各項目を通過 - アーティストと「ID」 - 動画同上。私は各タイトルのサブストリングを作成し、これを使ってアーティストを特定の配列にグループ化します。

そのアーティストの配列が既に存在する場合は、その配列の最後に 'id'を挿入しようとします。配列が存在しない場合は、配列を作成し、その配列に 'id'を挿入します。

最後に、私は各アーティスト配列を 'アーティスト'配列にプッシュしようとします。私は$アーティスト配列をプリントアウトしたときに、私は何を得る

は、それらが$サブストリングに基づいて一緒に分類されなければならないとき、ひとつひとつの$ idはそれ自身の配列である。この

Array 
(
[0] => Array 
    (
     [0] => 1_YUrdjLyAU 
    ) 

[1] => Array 
    (
     [0] => Gp8lDW2LUM0 
    ) 

... 

[543] => Array 
    (
     [0] => Exa0CzlCb3Y 
    ) 

のようなものです。例:

Array 
(
[0] => Array 
    (
     [0] => 1_YUrdjLyAU 
     [1] => 1_YUrdjLyAU 
     [2] => 1_YUrdjLyAU 
     [3] => 1_YUrdjLyAU 
     [4] => 1_YUrdjLyAU 
    ) 

[1] => Array 
    (
     [0] => Gp8lDW2LUM0 
     [1] => 1_YUrdjLyAU 
     [2] => 1_YUrdjLyAU 
     [3] => 1_YUrdjLyAU 
    ) 

私は何を理解していませんか?

+0

できるだけ早く私は私が実現していた、この投稿として。 is_array($ substring)をチェックしているときに、$ substringと同じ名前の配列があり、$ substringが実際にはStringであるという配列ではないかどうかを実際に調べる必要があります。 –

+0

最初に '$ substring = strtolower($ substring);'を作成し、 '$ substring = [];で値を紛失した後はなぜですか? – splash58

+0

すべての項目について、 '$ substring'が配列でない場合、' $ id'を空の配列 '$ substring'にプッシュし、その配列を' $ artist'配列にプッシュします。 'substr()'と 'strtolower()'を実行している場合、 '$ substring'は常に文字列になります。 – MCMXCII

答えて

0

使用配列のキーとしてサブと次の操作を行います

$artists = array(); 

foreach($playlist->items as $item) { 
    $artist = $item->snippet->artist; // however the artist name is fetched.. 
    $id = $item->snippet->resourceId->videoId; 

    $artists[$artist][] = $id 
} 

この方法では、あなたはアーティストであるかどうかを確認する必要はありません。ここで

**Remove** 
if (is_array($substring)) { 
       array_push($substring, $id); 
      } 
      else { 
       $substring = array(); 
       array_push($substring, $id); 
      } 
     array_push($artists, $substring); 

**Replace** 
    $artist[$substring][]=$id; 
+0

ありがとう返信用私はこの奇妙な部分文字列のルートを使用しました。なぜなら、各ビデオのタイトルは「アーティストタイトル」を引き出すのが簡単ではないからです。たとえば、デビッド・ボウイの曲がいくつかあったといいます。彼らのタイトルは "David Bowie - Hetoes"、 "david bowie live 11/17/70"、 "david bowie official music video"などです。私のサブストリングでは、3人とも "david"それを元の配列にグループ化する –

+0

これはそれです!ありがとうございました。私がする必要があるのはそれだけです。 –

+0

@RomanTelfordあなたが助けてくれた場合、あなたはアップヴォートすることができます。 :-) – imox

1

はあなたの問題にシンプルなソリューションです。すでに配列に入っていれば自動的にそれを行い、アーティストにビデオIDを追加します。 $artistsの配列は、私はあなたが数値配列でそれを行うことができるとは思わない、assosiativeされます。
配列は次のようになります。

Array 
(
['Jon Lajoie'] => Array 
    (
     [0] => 1_YUrdjLyAU 
     [1] => lf3hflkap39 
     [2] => 1vt1455zzbe 
     [3] => 6dthg3drgjb 
     [4] => jfop3ifjf3p 
    ) 

['Lonely Island'] => Array 
    (
     [0] => Gp8lDW2LUM0 
     [1] => 5he5hj67j7r 
     [2] => krt7tkktzk8 
     [3] => we54w4ggsrg 
    ) 
) 
関連する問題