多维数组从列和行中删除重复项
Multidimensional array remove duplicates from columns and rows
我必须将 excel 文档中的一些数据插入到数据库中。
数据已保存为.csv,然后通过PHP.
添加到数组中
数据如下:
Column A Column B Column C
100 200 100
50 10 100
200 200 100
30 10 300
然后我用它来分隔每一列(在 foreach 循环内)
list( $columnA, $columnB) = explode( ',', $values[0] );
$columnA= array($columnA);
print_r($columnA);
以上代码打印每一列的值。
所以我试图找到一种方法来从每一列中删除重复项,然后从每一行中删除(无论列名是什么)。我想从整个文档中删除重复项。例如,对于我发布的数据,我只需要值 100,200,50,10,30,300(仅来自整个文档的唯一值)。
更新:
原始数组(我通过使用 for 循环并传递 .CSV 文件中的所有数据创建的数组)显示:
Array ( [0] => G2100,100%,,,,,,,,,200,0.24,77,51,2,47, )
Array ( [0] => G2101,100%,,,,,,,,,200,0.24,77,42,15,43, )
Array ( [0] => G2102,30%,,,,,,,,,200,0.24,77,38,25,37, )
因此,通过使用我之前提到的列表函数,我拆分了所有列并获取了每一列的值。然后,如果我打印 $columnB 数组,它会显示:
Array ( [0] => 100%) Array ( [0] => 100%) Array ( [0] => 30%)
等等。当我使用 unique_array 时,它什么也不做。
$columnB = array_unique($columnB, SORT_REGULAR);
我尝试使用 array_map 但它也不起作用。
如有任何帮助,我们将不胜感激。
我不明白为什么 array_unique 在你的情况下不起作用,因为它实际上解决了问题:
<?php
$columnA = array(50,50,200,10);
$columnB = array(100,50,200,100);
$columnC = array(150,50,250);
$merged = array_merge($columnA, $columnB, $columnC);
$result = array_unique($merged);
var_dump($result);
?>
输出为:
array(6) {
[0]=>
int(50)
[2]=>
int(200)
[3]=>
int(10)
[4]=>
int(100)
[8]=>
int(150)
[10]=>
int(250)
}
这是一个简单的例子,但如果你能管理你的输入像上面的数组,那么你可以使用 array_unique 来只有唯一值...
编辑 1:
要从字符串中删除 % 符号,只需在需要的地方使用 rtrim:
$string = '100%';
$trimmed = (int)rtrim($string,'%');//make it int(or float if you like)
var_dump($trimmed);
编辑 2:
数组循环相关:
//I suppose this
//Array ( [0] => 100%) Array ( [0] => 100%) Array ( [0] => 30%)
//maps to this
$columnA = array(
0=>array('100%'),
1=>array('100%'),
2=>array('30%')
);
//go through every element
$temp = array();
foreach($columnA as $subArray){
//in this case when we know that there is only one element in the array we can do next:
$temp[] = $subArray[0];
}
$result = array_unique($temp);
echo "<pre>";
var_dump($result);
echo "</pre>";
这将是输出:
array(2) {
[0]=>
string(4) "100%"
[2]=>
string(3) "30%"
}
我必须将 excel 文档中的一些数据插入到数据库中。 数据已保存为.csv,然后通过PHP.
添加到数组中数据如下:
Column A Column B Column C
100 200 100
50 10 100
200 200 100
30 10 300
然后我用它来分隔每一列(在 foreach 循环内)
list( $columnA, $columnB) = explode( ',', $values[0] );
$columnA= array($columnA);
print_r($columnA);
以上代码打印每一列的值。 所以我试图找到一种方法来从每一列中删除重复项,然后从每一行中删除(无论列名是什么)。我想从整个文档中删除重复项。例如,对于我发布的数据,我只需要值 100,200,50,10,30,300(仅来自整个文档的唯一值)。
更新: 原始数组(我通过使用 for 循环并传递 .CSV 文件中的所有数据创建的数组)显示:
Array ( [0] => G2100,100%,,,,,,,,,200,0.24,77,51,2,47, )
Array ( [0] => G2101,100%,,,,,,,,,200,0.24,77,42,15,43, )
Array ( [0] => G2102,30%,,,,,,,,,200,0.24,77,38,25,37, )
因此,通过使用我之前提到的列表函数,我拆分了所有列并获取了每一列的值。然后,如果我打印 $columnB 数组,它会显示:
Array ( [0] => 100%) Array ( [0] => 100%) Array ( [0] => 30%)
等等。当我使用 unique_array 时,它什么也不做。
$columnB = array_unique($columnB, SORT_REGULAR);
我尝试使用 array_map 但它也不起作用。
如有任何帮助,我们将不胜感激。
我不明白为什么 array_unique 在你的情况下不起作用,因为它实际上解决了问题:
<?php
$columnA = array(50,50,200,10);
$columnB = array(100,50,200,100);
$columnC = array(150,50,250);
$merged = array_merge($columnA, $columnB, $columnC);
$result = array_unique($merged);
var_dump($result);
?>
输出为:
array(6) {
[0]=>
int(50)
[2]=>
int(200)
[3]=>
int(10)
[4]=>
int(100)
[8]=>
int(150)
[10]=>
int(250)
}
这是一个简单的例子,但如果你能管理你的输入像上面的数组,那么你可以使用 array_unique 来只有唯一值...
编辑 1:
要从字符串中删除 % 符号,只需在需要的地方使用 rtrim:
$string = '100%';
$trimmed = (int)rtrim($string,'%');//make it int(or float if you like)
var_dump($trimmed);
编辑 2:
数组循环相关:
//I suppose this
//Array ( [0] => 100%) Array ( [0] => 100%) Array ( [0] => 30%)
//maps to this
$columnA = array(
0=>array('100%'),
1=>array('100%'),
2=>array('30%')
);
//go through every element
$temp = array();
foreach($columnA as $subArray){
//in this case when we know that there is only one element in the array we can do next:
$temp[] = $subArray[0];
}
$result = array_unique($temp);
echo "<pre>";
var_dump($result);
echo "</pre>";
这将是输出:
array(2) {
[0]=>
string(4) "100%"
[2]=>
string(3) "30%"
}