Php 转换值数组
我有一个数组,看起来像这样Php 转换值数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个数组,看起来像这样 Array ( [0] => Array ( [code] => AS34 [2014-12-10] => 32 ) [1] => Array ( [code] => AS34 [2014-12-11] => 42 ) [2] => Arra
Array
(
[0] => Array
(
[code] => AS34
[2014-12-10] => 32
)
[1] => Array
(
[code] => AS34
[2014-12-11] => 42
)
[2] => Array
(
[code] => AS34
[2014-12-12] => 40
)
[3] => Array
(
[code] => AS34
[2014-12-15] => 44
)
[4] => Array
(
[code] => AH98
[2014-12-10] => 1
)
[5] => Array
(
[code] => AT78
[2014-12-12] => 1
)
[6] => Array
(
[code] => AL44
[2014-12-10] => 23
)
[7] => Array
(
[code] => AL44
[2014-12-11] => 27
)
[8] => Array
(
[code] => AL44
[2014-12-13] => 25
)
[9] => Array
(
[code] => AL44
[2014-12-15] => 26
)
)
var $example_data = array(
array(
'ID' => 1,
'code' => 'AS34',
'09/12/14' => '0',
'10/12/14' => '32',
'11/12/14' => '42',
'12/12/14' => '40',
'13/12/14' => '0',
'14/12/14' => '0',
'15/12/14' => '44',
),
array(
'ID' => 2,
'code' => 'AH98',
'09/12/14' => '0',
'10/12/14' => '1',
'11/12/14' => '0',
'12/12/14' => '0',
'13/12/14' => '0',
'14/12/14' => '0',
'15/12/14' => '0',
),
array(
'ID' => 3,
'code' => 'AT78',
'09/12/14' => '0',
'10/12/14' => '0',
'11/12/14' => '0',
'12/12/14' => '1',
'13/12/14' => '0',
'14/12/14' => '0',
'15/12/14' => '0',
),
array(
'ID' => 4,
'code' => 'AL44',
'09/12/14' => '0',
'10/12/14' => '23',
'11/12/14' => '27',
'12/12/14' => '0',
'13/12/14' => '25',
'14/12/14' => '0',
'15/12/14' => '26',
),
);
我正试图把它变成一个数组,看起来像这样
Array
(
[0] => Array
(
[code] => AS34
[2014-12-10] => 32
)
[1] => Array
(
[code] => AS34
[2014-12-11] => 42
)
[2] => Array
(
[code] => AS34
[2014-12-12] => 40
)
[3] => Array
(
[code] => AS34
[2014-12-15] => 44
)
[4] => Array
(
[code] => AH98
[2014-12-10] => 1
)
[5] => Array
(
[code] => AT78
[2014-12-12] => 1
)
[6] => Array
(
[code] => AL44
[2014-12-10] => 23
)
[7] => Array
(
[code] => AL44
[2014-12-11] => 27
)
[8] => Array
(
[code] => AL44
[2014-12-13] => 25
)
[9] => Array
(
[code] => AL44
[2014-12-15] => 26
)
)
var $example_data = array(
array(
'ID' => 1,
'code' => 'AS34',
'09/12/14' => '0',
'10/12/14' => '32',
'11/12/14' => '42',
'12/12/14' => '40',
'13/12/14' => '0',
'14/12/14' => '0',
'15/12/14' => '44',
),
array(
'ID' => 2,
'code' => 'AH98',
'09/12/14' => '0',
'10/12/14' => '1',
'11/12/14' => '0',
'12/12/14' => '0',
'13/12/14' => '0',
'14/12/14' => '0',
'15/12/14' => '0',
),
array(
'ID' => 3,
'code' => 'AT78',
'09/12/14' => '0',
'10/12/14' => '0',
'11/12/14' => '0',
'12/12/14' => '1',
'13/12/14' => '0',
'14/12/14' => '0',
'15/12/14' => '0',
),
array(
'ID' => 4,
'code' => 'AL44',
'09/12/14' => '0',
'10/12/14' => '23',
'11/12/14' => '27',
'12/12/14' => '0',
'13/12/14' => '25',
'14/12/14' => '0',
'15/12/14' => '26',
),
);
因此,基本上,它为每个“代码”和前7天设置了一个数组。有人能给我指出类似示例的方向吗?或者我应该使用的正确方法的一些阅读材料吗?类似(固定):
我想:
$data = Array
(
0 => Array
(
"id" => 1,
"code" => "AS34",
"2014-12-10" => 32
),
1 => Array
(
"id" => 1,
"code" => "AS34",
"2014-12-11" => 42
),
2 => Array
(
"id" => 1,
"code" => "AS34",
"2014-12-12" => 40
),
3 => Array
(
"id" => 1,
"code" => "AS34",
"2014-12-15" => 44
),
4 => Array
(
"id" => 1,
"code" => "AH98",
"2014-12-10" => 1
),
5 => Array
(
"id" => 1,
"code" => "AT78",
"2014-12-12" => 1
),
6 => Array
(
"id" => 1,
"code" => "AL44",
"2014-12-10" => 23
),
7 => Array
(
"id" => 1,
"code" => "AL44",
"2014-12-11" => 27
),
8 => Array
(
"id" => 1,
"code" => "AL44",
"2014-12-13" => 25
),
9 => Array
(
"id" => 1,
"code" => "AL44",
"2014-12-15" => 26
)
);
function in_array_r($needle, $haystack, $strict = false) { //taken from http://stackoverflow.com/a/4128377/4263082
foreach ($haystack as $item) {
if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
return true;
}
}
return false;
}
$codes = Array();
$counter = -1;
foreach($data as $key => $value) {
if(!in_array_r($data[$key]["code"], $codes, true)) {
$codes[++$counter] = Array();
foreach($data[$key] as $subkey => $subvalue) {$codes[$counter][$subkey] = $subvalue;}
}
else{
foreach($data[$key] as $subkey => $subvalue) {
if($subkey != "code" && $subkey != "id") {$codes[$counter][$subkey] = $subvalue;}
}
}
}
print_r($codes);
输出
Array
(
[0] => Array
(
[id] => 1
[code] => AS34
[2014-12-10] => 32
[2014-12-11] => 42
[2014-12-12] => 40
[2014-12-15] => 44
)
[1] => Array
(
[id] => 1
[code] => AH98
[2014-12-10] => 1
)
[2] => Array
(
[id] => 1
[code] => AT78
[2014-12-12] => 1
)
[3] => Array
(
[id] => 1
[code] => AL44
[2014-12-10] => 23
[2014-12-11] => 27
[2014-12-13] => 25
[2014-12-15] => 26
)
)
我让这个工作:
<?php
header ('Content-type: text/plain; charset=utf-8');
//source data from the question
$sourceArr = array(
array('id' => 1
,'code' => 'AS34'
,'2014-12-10' => '32'
)
,array('id' => 1
,'code' => 'AS34'
,'2014-12-11' => '42'
)
,array('id' => 1
,'code' => 'AS34'
,'2014-12-12' => '40'
)
,array('id' => 1
,'code' => 'AS34'
,'2014-12-15' => '44'
)
,array('id' => 1
,'code' => 'AH98'
,'2014-12-10' => '1'
)
,array('id' => 1
,'code' => 'AT78'
,'2014-12-12' => '1'
)
,array('id' => 1
,'code' => 'AL44'
,'2014-12-10' => '23'
)
,array('id' => 1
,'code' => 'AL44'
,'2014-12-11' => '27'
)
,array('id' => 1
,'code' => 'AL44'
,'2014-12-13' => '25'
)
,array('id' => 1
,'code' => 'AL44'
,'2014-12-15' => '26'
)
);
foreach($sourceArr as $k => $v)
{
//get dates for last seven days
$d0 = date('Y-m-d',time() - 60 * 60 * 24 * 0);
$d1 = date('Y-m-d',time() - 60 * 60 * 24 * 1);
$d2 = date('Y-m-d',time() - 60 * 60 * 24 * 2);
$d3 = date('Y-m-d',time() - 60 * 60 * 24 * 3);
$d4 = date('Y-m-d',time() - 60 * 60 * 24 * 4);
$d5 = date('Y-m-d',time() - 60 * 60 * 24 * 5);
$d6 = date('Y-m-d',time() - 60 * 60 * 24 * 6);
//if we have a valid element - then save it in temp array
if(array_key_exists($d0,$v)){ $tmpArr[$v['code']][$d0] = "'$v[$d0]'"; }
if(array_key_exists($d1,$v)){ $tmpArr[$v['code']][$d1] = "'$v[$d1]'"; }
if(array_key_exists($d2,$v)){ $tmpArr[$v['code']][$d2] = "'$v[$d2]'"; }
if(array_key_exists($d3,$v)){ $tmpArr[$v['code']][$d3] = "'$v[$d3]'"; }
if(array_key_exists($d4,$v)){ $tmpArr[$v['code']][$d4] = "'$v[$d4]'"; }
if(array_key_exists($d5,$v)){ $tmpArr[$v['code']][$d5] = "'$v[$d5]'"; }
if(array_key_exists($d6,$v)){ $tmpArr[$v['code']][$d6] = "'$v[$d6]'"; }
}
//create the result array
$cnt = 0;
foreach($tmpArr as $k => $v)
{
$resultArr[$cnt]['ID'] = $cnt;
$resultArr[$cnt]['code'] = "'$k'";
asort($v);
foreach($v as $k2 => $v2)
{
$resultArr[$cnt][$k2] = $v2;
}
$cnt++;
}
//output
echo "Old array: ".print_r($sourceArr,1);
echo "New array: ".print_r($resultArr,1);
?>
那么'code'
属性是每个数组的唯一标识符吗?那么,在进行此操作之前,请先弄清楚:所有id
都是相同的1
?它们当前都设置为1,如果这使事情更容易,我可以更改此属性?只是询问一下(因为这确实使事情更容易)为什么名称ID始终为1的字段?这里$array代表什么?这是原始数组吗?我在这里测试了这种方法:它不获取日期键,只获取code
和id
。您可以使用该站点修复您的功能。看起来很不错。谢谢你的建议。日期现在是固定的,您可以在Runnable上测试它。我得到一个为$dataForEach()提供的无效参数。我在这里测试了它:我在答案中发布的输出来自该站点的测试结果。让我看看我在复制/粘贴时是否键入了什么。我使用了您问题中第一块代码中的数组。当然,为了通过解析,我做了一些更改,比如删除[]
用引号包装键,提供逗号等,但是数据是一样的。您必须将该数组命名为$data
。再说一遍:这是您的数组,我只需为它提供一个名称$data
,并修复解析错误。另外,只要是2d数组,不同的数组也不应该是问题。如果需要解析print\u r的输出,这里有一个解决方案:请参阅此处注释中的函数print\u r\u reverse: