重新组织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,
];
}
}