2

これに頭を悩ませることはできません...次のような配列があります。

    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];  
    }
}

これにより、国と訪問回数の配列が得られるので、後で繰り返し処理できますが、残りをどのように処理すればよいかわかりません。

4

5 に答える 5

1
$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];
}
于 2012-04-13T19:22:58.190 に答える
1

これを行うには、配列から値を選択し、それらを新しい配列のキーとして使用してから、数値を追加します。この例では、変数のエイリアス (参照) を使用しているため、長いバージョンの変数を一度だけ記述する必要があります。

$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)
    }
  }
}
于 2012-04-13T19:36:35.900 に答える
1

このようなもの...

$result=array();
foreach ($a as $item)
    $result[$item[1]][$item[2]][$item[3]]+=$item[4]; 
于 2012-04-13T19:20:14.070 に答える
1

これは私がそれを行う方法です(配列が呼び出されると仮定します$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];
    }
}
于 2012-04-13T19:21:01.343 に答える
0

そうでない場合は、これが機能することを願っています-次のようなものがうまくいきます:

$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];
}
于 2012-04-13T19:21:08.270 に答える