Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重新组织PHP数组结构(数组中的数组)_Php_Arrays - Fatal编程技术网

重新组织PHP数组结构(数组中的数组)

重新组织PHP数组结构(数组中的数组),php,arrays,Php,Arrays,我在数组中有一个数组,它包含很多值: 183 => array (size=3) 0 => string 'DE' (length=2) 1 => string '2015-06-09' (length=10) 2 => string 'GK' (length=2) 184 => array (size=3) 0 => string 'DE' (length=2) 1

我在数组中有一个数组,它包含很多值:

  183 => 
    array (size=3)
      0 => string 'DE' (length=2)
      1 => string '2015-06-09' (length=10)
      2 => string 'GK' (length=2)   
  184 => 
    array (size=3)
      0 => string 'DE' (length=2)
      1 => string '2015-06-08' (length=10)
      2 => string 'GL' (length=2)   
  185 => 
    array (size=3)
      0 => string 'FR' (length=2)
      1 => string '2015-06-09' (length=10)
      2 => string 'GN' (length=2)   
  186 => 
    array (size=3)
      0 => string 'FR' (length=2)
      1 => string '2015-09-08' (length=10)
      2 => string 'GO' (length=2)
0是国家代码。1是一个日期。2是Excel文件中的一列

我想这样组织:

2015-06-09 => 
  array (size=3)
    DE => 
      array (size=2)
        column => GK
        download => 666 
    FR => 
      array (size=2)
        column => GN
        download => 777 

2015-06-08 =>
  array (size=3)
    DE => 
      array (size=2)
        column => GL
        download => 666 
    FR => 
      array (size=2)
        column => GO
        download => 777 
所以同一个日期可以出现不止一次。如果它得到一个具有相同日期的数组值,它会在其中插入国家代码及其“列”

如果它有一个以上的国家,它会添加一个新的国家。(带有“下载”和列值)

我有这个功能:

function get_cols_to_array_by_date($array) { 

    $mainarr = array();

    $last_in_arr = count($array); 

    for ($i=0; $i<$last_in_arr; $i++){

            $mainarr[$array[$i][1]] = array( $array[$i][0]=> array('downloads'=> 666, 'col'=>$array[$i][2]) );


    }

    return $mainarr;


}
函数按日期($array){
$mainarr=array();
$last\u in\u arr=计数($array);
对于($i=0;$i数组('downloads'=>666,'col'=>$array[$i][2]);
}
返回$mainarr;
}
它输出一个数组,当它到达同一日期时,该数组在全国范围内运行,但没有给我一个国家数组

我的代码中缺少了什么部分?
有没有更简单的方法?(PHP语法快捷键;)

假设
下载
是初始数组的键,每个元素有3个元素(日期和2个国家):

代码:
尝试循环并检查元素是否存在,如果不存在-添加它

//demo array
    $old = array(
        555=>array(
          0 => 'DE',
          1 => '2015-06-09',
          2 => 'GK'), 
        234=>array(
          0 => 'DE',
          1 => '2015-06-08',
          2 => 'GL'),   
        123=>array(
          0 => 'FR', 
          1 => '2015-06-09',
          2 => 'GN')
          );  

    $new = array();   
    foreach($old as $key=>$arrayValues)
    {
        if(!array_key_exists($arrayValues[1], $new)){ //check if there is already a key by date
            $new[$arrayValues[1]] = array();
        }
        $new[$arrayValues[1]][$arrayValues[0]] = array('column'=>$arrayValues[2], 'downloads'=>$key); //append formated array
    }
    echo "<pre>";
    var_dump($new);
    echo "</pre>";
array(2) {
  ["2015-06-09"]=>
  array(2) {
    ["DE"]=>
    array(2) {
      ["column"]=>
      string(2) "GK"
      ["downloads"]=>
      int(555)
    }
    ["FR"]=>
    array(2) {
      ["column"]=>
      string(2) "GN"
      ["downloads"]=>
      int(123)
    }
  }
  ["2015-06-08"]=>
  array(1) {
    ["DE"]=>
    array(2) {
      ["column"]=>
      string(2) "GL"
      ["downloads"]=>
      int(234)
    }
  }
}
$result = [];

foreach ($myArray as $key => $values) {
    if (!isset($result[$values[1]])) {
        $result[$values[1]] = [
            $values[0] => [
                'column' => $values[2],
                'download' => $key,
            ]
        ];
    } elseif (!isset($result[$values[1]][$values[0]])) {
        $result[$values[1]][$values[0]] = [
            'column' => $values[2],
            'download' => $key,
        ];
    }
}