Php 如何从PDO fetchall中找到重复的数组值?
我正在为我们公司的内部网站制作一个报告仪表板。下面的功能是从表中选择所有作业和后缀。我正在使用PDO fetchall检索我的结果。该数组看起来像:Php 如何从PDO fetchall中找到重复的数组值?,php,pdo,Php,Pdo,我正在为我们公司的内部网站制作一个报告仪表板。下面的功能是从表中选择所有作业和后缀。我正在使用PDO fetchall检索我的结果。该数组看起来像: Array ( [0] => Array ( [JOB] => 197182 [SUFFIX] => 002 ) [1] => Array ( [JOB] => M03001 [SUFFIX] =&
Array
(
[0] => Array
(
[JOB] => 197182
[SUFFIX] => 002
)
[1] => Array
(
[JOB] => M03001
[SUFFIX] => 001
)
[2] => Array
(
[JOB] => 197182
[SUFFIX] => 002
)
)
在这种情况下,仪表板应该有2行,每个作业1行(不包括重复项),但是如何搜索此数组并使其仅返回2行计数而不是3行计数?因为有一个重复的作业和后缀,我不想用相同的作业后缀创建第三行,所以它应该只有两行
function row_count()
{
$conn = new PDO('odbc:GLOBALTST');
$result = $conn->prepare('SELECT JOB, SUFFIX FROM JOBS_IN_PROCESS_G');
$result->execute();
$row = $result->fetchall(PDO::FETCH_ASSOC);
global $count;
$count = count($row);\\ if I print this out I get 3
}
您可以在查询端通过选择
DISTINCT
行的作业和后缀列来解决这个问题,如下所示:
$result = $conn->prepare('SELECT DISTINCT JOB, SUFFIX FROM JOBS_IN_PROCESS_G');
或如果您想在从表中选择行后在PHP端选中此项,但我更喜欢第一项,因为最好只从DB表中获取您需要的内容。您也可以在PHP中使用
数组\u列
来完成此操作
如果您想保持顺序,请使用
array\u reverse
array\u unique()
?@Jaquarh,根据有关array\u unique的php文档,此函数不适用于多维数组。在这种情况下,一个简单的循环和未设置的跟踪副本就足够了。但是,依靠您的数据层来处理它可能会更好,如果它可能是一个重复出现的主题,那么您也可以为它创建一个视图。为什么不在SQL中执行计数?我支持在DB端进行计数的概念。一个好的经验法则是不要要求超过你需要的。
$unDuplicated = array_combine(array_column(($rows = $result->fetchall(PDO::FETCH_ASSOC)), 'SUFFIX'), $rows);