我有一个看起来像这样的数组:
array(3) { ["fk_article_id"]=> string(1) "4" ["first_name"]=> string(6) "Ulrike" ["last_name"]=> string(10) "Grasberger" }
array(3) { ["fk_article_id"]=> string(1) "9" ["first_name"]=> string(5) "Frank" ["last_name"]=> string(9) "Neubacher" }
array(3) { ["fk_article_id"]=> string(3) "896" ["first_name"]=> string(2) "D." ["last_name"]=> string(5) "Bauer" }
array(3) { ["fk_article_id"]=> string(3) "896" ["first_name"]=> string(2) "S." ["last_name"]=> string(6) "Anders" }
array(3) { ["fk_article_id"]=> string(3) "896" ["first_name"]=> string(2) "M." ["last_name"]=> string(6) "Tsokos" }
array(3) { ["fk_article_id"]=> string(3) "897" ["first_name"]=> string(8) "Reinhard" ["last_name"]=> string(8) "Scholzen" }
现在我要做的是摆脱重复的"fk_article_id"
值"896"
,以便只留下第一个:
array(3) { ["fk_article_id"]=> string(3) "896" ["first_name"]=> string(2) "D." ["last_name"]=> string(5) "Bauer" }
我现在array_unique()
但我没有发现可以告诉该函数仅使用"fk_article_id"
ID中的值。
我该怎么做?
编辑:
这是三列数据库表的输出:
$authors_result = pg_query($query_authors) or trigger_error("An error occurred.<br/>" . mysql_error() . "<br />SQL-Statements: {$searchSQL}");
while ($row = pg_fetch_assoc($authors_result)) {
var_dump($row);
}
答案 0 :(得分:3)
使用array_reduce
的快捷方式如下:
$unique = array_reduce($subject, function($final, $article){
static $seen = array();
if ( ! array_key_exists($article['fk_article_id'], $seen)) {
$seen[$article['fk_article_id']] = NULL;
$final[] = $article;
}
return $final;
});
编辑:似乎您不想使用汇总结果。以下是另外两个想法:
以PHP过滤
$seen = array();
while ($row = pg_fetch_assoc($authors_result)) {
// Skip this row if we have already seen its article id
if (array_key_exists($row['fk_article_id'], $seen)) {
continue;
}
// Note that we have seen this article
$seen[$row['fk_article_id']] = NULL;
// Do whatever with your row
var_dump($row);
}
在数据库中过滤
这里的想法是更改正在执行的查询,以便重复的文章ID不会出现在结果集中。如何完成这将取决于您已经使用的查询。
答案 1 :(得分:1)
foreach($array as $key => $value){
if(!in_array( $array[$key]['fk_article_id'], $usedValues)){
$usedValues = $array[$key]['fk_article_id'];
$cleanArray = $array[$key];
}
}
沿着这些方向的东西应该这样做,我认为没有预先存在的数组函数
答案 2 :(得分:1)
一种方法是迭代数组,自己复制新数组中每个fk_article_id的第一个实例。
<?php
$your_unique_array = array();
foreach ($your_original_array as $v) {
if (!isset($your_unique_array[$v['fk_article_id']) {
$your_unique_array[$v['fk_article_id'] = $v;
}
}
答案 3 :(得分:0)
我会使用foreach循环迭代数组并将没有重复_id的所有数组保存到新数组中。
$clean = array();
foreach ($arrays as $array) {
if (!isset($clean[$array['fk_article_id']])
$clean[$array['fk_article_id']] = $array;
}
答案 4 :(得分:0)
**获得唯一关联数组** 使用此方法,您可以轻松获得唯一的关联数组/多维数组。
array:6 [▼
0 => array:1 [▼
2 => "Airtel DTH"
]
1 => array:1 [▼
2 => "Airtel DTH"
]
2 => array:1 [▼
2 => "Airtel DTH"
]
3 => array:1 [▼
3 => "NeuSoft PVT LMT"
]
4 => array:1 [▼
3 => "NeuSoft PVT LMT"
]
5 => array:1 [▼
3 => "NeuSoft PVT LMT"
]
]
function assoc_Array_unique($array)
{
$result = array_map("unserialize", array_unique(array_map("serialize", $array)));
foreach ($result as $key => $value)
{
if ( is_array($value) )
{
$result[$key] = assoc_Array_unique($value);
}
}
return $result;
}
$arr_Company= assoc_Array_unique($arr_Company); // get Unique Array
$arr_Company = array_values($arr_Company); Rearrange Index of Array.