我是新来的stackoverflow,我需要一些帮助。
我试图从PHP中的多维数组中删除重复项,例如:
Array (
[0] => Array ( [Plat] => hello [Data] => 01/01/2015 [Term] => PHP [Quan] => 1 )
[1] => Array ( [Plat] => hello [Data] => 01/01/2015 [Term] => PHP [Quan] => 1 )
[2] => Array ( [Plat] => hello [Data] => 03/01/2015 [Term] => PHP [Quan] => 1 )
[3] => Array ( [Plat] => hello [Data] => 03/01/2015 [Term] => PHP [Quan] => 1 )
[4] => Array ( [Plat] => hello [Data] => 03/01/2015 [Term] => PHP [Quan] => 1 )
[5] => Array ( [Plat] => hello [Data] => 03/01/2015 [Term] => PHP [Quan] => 1 )
)
并创建一个数组,删除重复项,并将发现的重复项数量添加到Quan
中,如下所示(通过数据过滤):
Array (
[0] => Array ( [Plat] => hello [Data] => 01/01/2015 [Term] => PHP [Quan] => 2 )
[1] => Array ( [Plat] => hello [Data] => 03/01/2015 [Term] => PHP [Quan] => 4 )
)
我的代码如下:($top
是数组)
foreach($top as $value){
if(!empty($temp_top)){
for($i =0;$i<sizeof($temp_top);$i++){
if($value['Data'] == $temp_top[$i]['Data'] ){
$temp_top[$i]['Quan'] +=1;
}else{
$temp_top[] = $value;
}
}
}else{
$temp_top[] = $value;
}
}
我尝试了一些我在堆栈中找到的答案,例如:
$input = array_map("unserialize", array_unique(array_map("serialize", $top)));
但是我不知道Quan
有多少
在别人的帮助下,我自己找到了一个解决办法。
下面是我的代码示例:
$temp_top = array_map("unserialize", array_unique(array_map("serialize", $top)));
$numvezesfound=0;
foreach($temp_top as $key => $value){
for($i =0;$i<sizeof($top);$i++){
if($value['Data'] == $top[$i]['Data'] ){
$numvezesfound +=1;
}
}
$temp_top[$key]['Quan'] = $numvezesfound;
$numvezesfound = 0;
}
$top = $temp_top;
如果有人能帮助我使这段代码更漂亮,我将在你的债务:)
谢谢大家!
您将需要实现临时键,以便当您迭代数组时,您可以确定是否正在处理Data
的第一次出现。如果没有,只需将当前的Quan
值添加到第一次出现的Quan
值。
当完成循环时,通过调用array_values()
删除临时键(重新索引)。
代码(演示):
$array = [
["Plat" => "hello", "Data" => "01/01/2015", "Term" => "PHP", "Quan" => "1"],
["Plat" => "hello", "Data" => "01/01/2015", "Term" => "PHP", "Quan" => "1"],
["Plat" => "hello", "Data" => "03/01/2015", "Term" => "PHP", "Quan" => "1"],
["Plat" => "hello", "Data" => "03/01/2015", "Term" => "PHP", "Quan" => "1"],
["Plat" => "hello", "Data" => "03/01/2015", "Term" => "PHP", "Quan" => "1"],
["Plat" => "hello", "Data" => "03/01/2015", "Term" => "PHP", "Quan" => "1"],
];
foreach ($array as $row) {
if (!isset($result[$row['Data']])) {
$result[$row['Data']] = $row;
} else {
$result[$row['Data']]['Quan'] += $row['Quan'];
}
}
$result = array_values($result);
var_export($result);
输出:array (
0 =>
array (
'Plat' => 'hello',
'Data' => '01/01/2015',
'Term' => 'PHP',
'Quan' => 2,
),
1 =>
array (
'Plat' => 'hello',
'Data' => '03/01/2015',
'Term' => 'PHP',
'Quan' => 4,
),
)
*注意,如果你想忽略Quan
的值,每次只添加1
,你可以使用:
if (!isset($result[$row['Data']])) {
$result[$row['Data']]['Quan'] = 1;
} else {
++$result[$row['Data']]['Quan'];
}
由于Quan
列数据,您的问题在这个逻辑上是模糊的。