2017-02-28 71 views
0

这是我的代码应该如何工作。我从一些远程JSON URL中提取数据并将它们解码回正常的数组。然后我遍历这些数组并创建一个组合数组。循环时,我在组合数组内执行array_search查看用户名的值是否已经存在并返回键。如果返回一个密钥,那么我将该密钥的数据与循环数据结合起来。如果搜索返回false,则将循环数据添加到数组的末尾。PHP array的几个问题

有几个问题我有,他们可能有关,但我不知道。

首先,在我的代码中,当我的array_search运行时,它破坏了代码。 其次,如果我var_dump在array_search if语句之上的主数组,然后该数组填充循环的第一轮,但是当我从转储看数组的结构时,我看到该数组开始出奇怪的,我不知道为什么。

下面是代码

$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++; 
      } 
     } 
    } 

这里是从通知的var_dump输出的阵列阵列( )1开始。如果我摆脱array_search和代码不那么这个突破数组的一部分被添加到循环的每一轮的开始。总是与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。