2017-02-28 6 views
0

私のコードがどのように機能するのでしょうか。いくつかのリモートJSON URLからデータを取り出し、デコードして通常の配列に戻します。次に、それらの配列をループし、1つの結合配列を作成します。ループ中に、配列の中にarray_searchを実行して、usernameの値がすでに存在するかどうかを調べ、キーを返します。キーが返された場合は、そのキーのデータとループデータを結合します。検索でfalseが返された場合は、配列の最後にループデータを追加します。PHP配列に関するいくつかの問題

私が抱えている問題はいくつかありますが、関連する可能性がありますが、わかりません。

まず、私のコードでは、私のarray_searchを実行するとコードが壊れます。 第2に、array_search ifステートメントの上にあるマスター配列をvar_dumpすると、ループの最初のラウンドが配列に挿入されますが、ダンプから配列の構造を見ると、配列が奇妙になり、なぜか分からない。ここで

はコード

$master_user_array = array(); 
    foreach($url_list AS $url) { 
     $json = file_get_contents($url."?key=".self::AUTH_KEY); 
    $data = json_decode($json, true); 

    $user_count = 0; 
     foreach($data['user'] AS $user) {echo highlight_string(var_export($master_user_array, true)); 
    if(count($master_user_array) > 0) { 
     $key = array_search($user['username'], array_column($master_user_array, 'username')); 
      } else { 
       $key = false; 
      } 

    if(false !== $key) { 
     $master_user_array[$key]['username'] = $user['username']; 
     $master_user_array[$key]['email'] = $user['email']; 

     $master_user_array[$key]['total']['counttoday'] += $user['counttoday']; 
       $master_user_array[$key]['total']['countweek'] += $user['countweek']; 
       $master_user_array[$key]['total']['countmonth'] += $user['countmonth']; 
       $master_user_array[$key]['total']['countyear'] += $user['countyear']; 
       $master_user_array[$key]['total']['counttotal'] += $user['counttotal']; 

     $master_user_array[$key]['sites'][$data['siteurl']]['counttoday'] = $user['counttoday']; 
       $master_user_array[$key]['sites'][$data['siteurl']]['countweek'] = $user['countweek']; 
       $master_user_array[$key]['sites'][$data['siteurl']]['countmonth'] = $user['countmonth']; 
       $master_user_array[$key]['sites'][$data['siteurl']]['countyear'] = $user['countyear']; 
       $master_user_array[$key]['sites'][$data['siteurl']]['counttotal'] = $user['counttotal']; 
      } else { 
     $master_user_array[$user_count]['username'] = $user['username']; 
     $master_user_array[$user_count]['email'] = $user['email']; 

     $master_user_array[$user_count]['total']['counttoday'] = $user['counttoday']; 
       $master_user_array[$user_count]['total']['countweek'] = $user['countweek']; 
       $master_user_array[$user_count]['total']['countmonth'] = $user['countmonth']; 
       $master_user_array[$user_count]['total']['countyear'] = $user['countyear']; 
       $master_user_array[$user_count]['total']['counttotal'] = $user['counttotal']; 

     $master_user_array[$user_count]['sites'][$data['siteurl']]['counttoday'] = $user['counttoday']; 
       $master_user_array[$user_count]['sites'][$data['siteurl']]['countweek'] = $user['countweek']; 
       $master_user_array[$user_count]['sites'][$data['siteurl']]['countmonth'] = $user['countmonth']; 
       $master_user_array[$user_count]['sites'][$data['siteurl']]['countyear'] = $user['countyear']; 
       $master_user_array[$user_count]['sites'][$data['siteurl']]['counttotal'] = $user['counttotal']; 

     $user_count++; 
      } 
     } 
    } 

されており、ここで私はarray_searchを取り除く場合は、配列が配列( )1から始まるのvar_dump通知から出力されたコードは、この破損しません配列の一部がループのすべてのラウンドの先頭に追加されます。いつもと一緒に1

array (
) 1 array (
    '' => 
    array (
    'username' => 'somename', 
    'email' => 'someemail', 
    'total' => 
    array (
     'counttoday' => 0, 
     'countweek' => 0, 
     'countmonth' => 0, 
     'countyear' => 0, 
     'counttotal' => 3, 
    ), 
    'sites' => 
    array (
     '' => 
     array (
     'counttoday' => 0, 
     'countweek' => 0, 
     'countmonth' => 0, 
     'countyear' => 0, 
     'counttotal' => '3', 
    ), 
    ), 
), 
) 

答えて

0

私は別の方法を知っています。複雑なことをしようとするのではなく、配列を単純化してarray_searchを完全に取り除くことができました。