根据特定键删除重复项
Remove duplicates based on a specific key
得到一个像这样的多维数组:
$A = array(
[0]=>
array(
["rel"]=> 4
["name"]=> "Bar"
...
)
[1]=>
array(
["rel"]=> 2
["name"]=> "Bar"
...
)
[2]=>
array(
["rel"]=> 1
["name"]=> "Foo"
...
)
[3]=>
array(
["rel"]=> 5
["name"]=> "Bar"
...
)
[4]=>
array(
["rel"]=> 4
["name"]=> "Tee"
...
)
)
我想根据特定键删除重复项,同时保持除索引键之外的原始数组结构。
为了这个例子,假设我想删除那些具有相同键 ["name"]
.
的子数组
所以最终结果应该是这样的:
$X = array(
[0]=>
array(
["rel"]=> 4
["name"]=> "Bar"
...
)
[1]=>
array(
["rel"]=> 1
["name"]=> "Foo"
...
)
[2]=>
array(
["rel"]=> 4
["name"]=> "Tee"
...
)
)
我正在寻找解决此问题的有效方法。
理想情况下,array_unique
函数接受 key
值作为参数以查找给定数组上的重复项。
$X = array_key_unique($A, 'name');
这个函数应该可以完成工作:
function array_key_unique($arr, $key) {
$uniquekeys = array();
$output = array();
foreach ($arr as $item) {
if (!in_array($item[$key], $uniquekeys)) {
$uniquekeys[] = $item[$key];
$output[] = $item;
}
}
return $output;
}
并应用于上述特定问题:
$X = array_key_unique($A, 'name');
试试这个..
for ($i = 0; $i < count($A); $i++)
{
$repeated= null;
for ($j = $i+1; $j < count($A); $j++)
{
if (strcmp($A[$j]['name'],$A[$i]['name']) === 0)
{
$repeated= $j;
break;
}
}
if (!is_null($repeated))
array_splice($A,$repeated,1);
}
print_r($A);
得到一个像这样的多维数组:
$A = array(
[0]=>
array(
["rel"]=> 4
["name"]=> "Bar"
...
)
[1]=>
array(
["rel"]=> 2
["name"]=> "Bar"
...
)
[2]=>
array(
["rel"]=> 1
["name"]=> "Foo"
...
)
[3]=>
array(
["rel"]=> 5
["name"]=> "Bar"
...
)
[4]=>
array(
["rel"]=> 4
["name"]=> "Tee"
...
)
)
我想根据特定键删除重复项,同时保持除索引键之外的原始数组结构。
为了这个例子,假设我想删除那些具有相同键 ["name"]
.
所以最终结果应该是这样的:
$X = array(
[0]=>
array(
["rel"]=> 4
["name"]=> "Bar"
...
)
[1]=>
array(
["rel"]=> 1
["name"]=> "Foo"
...
)
[2]=>
array(
["rel"]=> 4
["name"]=> "Tee"
...
)
)
我正在寻找解决此问题的有效方法。
理想情况下,array_unique
函数接受 key
值作为参数以查找给定数组上的重复项。
$X = array_key_unique($A, 'name');
这个函数应该可以完成工作:
function array_key_unique($arr, $key) {
$uniquekeys = array();
$output = array();
foreach ($arr as $item) {
if (!in_array($item[$key], $uniquekeys)) {
$uniquekeys[] = $item[$key];
$output[] = $item;
}
}
return $output;
}
并应用于上述特定问题:
$X = array_key_unique($A, 'name');
试试这个..
for ($i = 0; $i < count($A); $i++)
{
$repeated= null;
for ($j = $i+1; $j < count($A); $j++)
{
if (strcmp($A[$j]['name'],$A[$i]['name']) === 0)
{
$repeated= $j;
break;
}
}
if (!is_null($repeated))
array_splice($A,$repeated,1);
}
print_r($A);