![](/img/trans.png)
[英]how do I create a multidimensional associative array inside of a foreach loop?
[英]How can I create this multidimensional array from a foreach loop?
我無法解決這個問題...我有一個看起來像這樣的數組:
Array
(
[0] => Array
(
[0] => 20120412
[1] => United States
[2] => Illinois
[3] => Marion
[4] => 2
)
[1] => Array
(
[0] => 20120412
[1] => United States
[2] => Illinois
[3] => Carbondale
[4] => 2
)
[2] => Array
(
[0] => 20120412
[1] => United States
[2] => Illinois
[3] => Carbondale
[4] => 2
)
)
我希望它像:
array("United States" => array("Illinois" => array("Carbondale" => "4")));
這樣才能將國家/地區帶出,然后是國家/地區,然后將城市的所有數字加在一起。
到目前為止,我所擁有的是:
foreach($location_google_data3 as $location_google_data4){
if($location_google_data4[0]==date("Ymd")){
$today_visitsbycountry[$location_google_data4[1]]+=$location_google_data4[4];
}
}
這給了我一系列的國家和訪問次數,以便我以后可以遍歷它,但是不確定如何進行其余的工作。
像這樣
$result=array();
foreach ($a as $item)
$result[$item[1]][$item[2]][$item[3]]+=$item[4];
這就是我的方法(假設您的數組稱為$input
):
$output = array();
foreach ($input as $city) {
if (!isset($output[$city[1]])) {
$output[$city[1]] = array();
}
if (!isset($output[$city[1]][$city[2]])) {
$output[$city[1]][$city[2]] = array();
}
if (isset($output[$city[1]][$city[2]][$city[3]])) {
$output[$city[1]][$city[2]][$city[3]] += $city[4];
} else {
$output[$city[1]][$city[2]][$city[3]] = $city[4];
}
}
$resultArray = array();
foreach($yourArray as $data)
{
if(!isset($resultArray[$data[1]])) {
$resultArray[$data[1]] = array();
}
if(!isset($resultArray[$data[1]][$data[2]])) {
$resultArray[$data[1]][$data[2]] = array();
}
if(!isset($resultArray[$data[1]][$data[2]][$data[3]])) {
$resultArray[$data[1]][$data[2]][$data[3]] = 0;
}
$resultArray[$data[1]][$data[2]][$data[3]] += $data[4];
}
為此,您可以從數組中選取值,並將其用作新數組的鍵,然后添加數字。 本示例使用變量別名(引用),因此變量的長版本僅需編寫一次:
$filterDate = '20120412';
$build = array();
foreach ($array as $item)
{
list($date, $country, $state, $city, $number) = $item;
if ($date != $filterDate) continue;
$alias = &$build[$country][$state][$city];
$alias += $number;
}
unset($alias);
結果( $build
):
array(1) {
["United States"]=>
array(1) {
["Illinois"]=>
array(2) {
["Marion"]=>
int(2)
["Carbondale"]=>
int(4)
}
}
}
我希望這會成功,如果沒有的話-這樣的事情會成功的:
$result = array();
foreach( $your_array as $arr ) {
if( !isset( $result[ $arr[1] ] ) ) {
$result[ $arr[1] ] = array();
}
if( !isset( $result[ $arr[1] ][ $arr[2] ] ) ) {
$result[ $arr[1] ][ $arr[2] ] = array();
}
if( !isset( $result[ $arr[1] ][ $arr[2] ][ $arr[3] ] ) ) {
$result[ $arr[1] ][ $arr[2] ][ $arr[3] ] = 0;
}
$result[ $arr[1] ][ $arr[2] ][ $arr[3] ] += (int)$arr[4];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.