私のコードがどのように機能するのでしょうか。いくつかのリモート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',
),
),
),
)