此刻我有这个数组:
array(4) {
[0]=>
array(2) {
["cluster"]=>
string(3) "ICT"
["opleiding"]=>
string(32) "Applicatie- en mediaontwikkeling"
}
[1]=>
array(2) {
["cluster"]=>
string(3) "ICT"
["opleiding"]=>
string(21) "ICT cluster opleiding"
}
[2]=>
array(2) {
["cluster"]=>
string(15) "nog een cluster"
["opleiding"]=>
string(25) "nog een cluster opleiding"
}
[3]=>
array(2) {
["cluster"]=>
string(8) "Techniek"
["opleiding"]=>
string(26) "Techniek cluster opleiding"
}
}
我希望能够从此阵列中删除重复的群集,在这种情况下为“ ICT”(最终可能会变得更多)。
此数组来自以下查询:
$result_array = $wpdb->get_results("SELECT cluster.cluster,
opleiding.opleiding
FROM opleiding
INNER JOIN cluster
ON opleiding.cluster_id = cluster.cluster_id
GROUP BY opleiding.opleiding", ARRAY_A);
所以,我想要的数组是什么样的:
array(4) {
[0]=>
array(2) {
["cluster"]=>
string(3) "ICT"
["opleiding"]=>
string(32) "Applicatie- en mediaontwikkeling"
}
[1]=>
array(1) {
["opleiding"]=>
string(21) "ICT cluster opleiding"
}
[2]=>
array(2) {
["cluster"]=>
string(15) "nog een cluster"
["opleiding"]=>
string(25) "nog een cluster opleiding"
}
[3]=>
array(2) {
["cluster"]=>
string(8) "Techniek"
["opleiding"]=>
string(26) "Techniek cluster opleiding"
}
}
我将如何处理此问题?我应该在查询中更改某些内容吗?还是我最初的想法是从数组中删除该值正确,然后我该怎么做?
我的输出功能:
public function getOpleidingCluster()
{
global $wpdb;
$return_array = array();
$result_array = $wpdb->get_results("SELECT cluster.cluster, opleiding.opleiding
FROM opleiding
INNER JOIN cluster
ON opleiding.cluster_id = cluster.cluster_id
GROUP BY opleiding.opleiding", ARRAY_A);
echo "<pre>";
var_dump($result_array);
echo " </pre>";
// For all database results:
foreach ($result_array as $idx => $array) {
// New opleiding object
$koppelOpleidingCluster = new ClusterOpleiding();
// Set all info
$koppelOpleidingCluster->setCluster($array['cluster']);
$koppelOpleidingCluster->setClusterId($array['cluster_id']);
$koppelOpleidingCluster->setOpleidingId($array['opleiding_id']);
$koppelOpleidingCluster->setOpleiding($array['opleiding']);
// Add new object to return array.
$return_array[] = $koppelOpleidingCluster;
}
return $return_array;
}
获取页面上的数据:
<table border="1">
<?php
$koppelOpleidingCluster = $clusterOpleiding->getOpleidingCluster();
foreach ($koppelOpleidingCluster as $koppelOpleidingCluster2){
?>
<tr>
<td style="display:none;"> <input type="hidden" name="clusterId" value=" <?php echo $koppelOpleidingCluster2->getClusterId(); ?>"></td>
<td name="cluster"> <?php echo $koppelOpleidingCluster2->getCluster(); ?></td>
</tr>
<tr>
<td style="display:none;"> <input type="hidden" name="opleidingId" value=" <?php echo $koppelOpleidingCluster2->getOpleidingId(); ?>"></td>
<td name="opleiding"> <?php echo $koppelOpleidingCluster2->getOpleiding(); ?></td>
</tr>
<?php
}
?>
</table>
教育意味着教育
谢谢!
答案 0 :(得分:1)
您想要获得的所需数组结构并不是我建议的。最佳实践是数组中的所有元素都具有相同的键。
您似乎正在寻找一种抑制输出中重复值的方法。尝试使您的阵列与所需的输出匹配是错误的。而是保留数组原样,并且 only 使您的代码对其进行迭代,使其意识到重复的值,从而使其不输出它们。
在此之前,您还需要了解一下SQL查询。它违反了一个规则,即如果您有group by
子句,则select
子句应只包含聚合表达式或出现在group by
子句中的表达式。在这种情况下,在我看来,您可以跳过group by
子句。而是添加一个order by cluster.cluster, opleiding.opleiding
子句,以确保重复出现的群集不会中断。或者换句话说:它保证属于同一集群的所有教育都一起列出。
现在更改输出代码。使用一个将用于检测重复值的额外变量,并添加一个if
块,该块仅在不重复时显示集群行:
<?php
$prevCluster = ""; // <----- add this
$koppelOpleidingCluster = $clusterOpleiding->getOpleidingCluster();
foreach ($koppelOpleidingCluster as $koppelOpleidingCluster2){
if ($koppelOpleidingCluster2->getClusterId() != $prevCluster) { // <----
?>
<tr>
<td style="display:none;"> <input type="hidden" name="clusterId" value=" <?php echo $koppelOpleidingCluster2->getClusterId(); ?>"></td>
<td name="cluster"> <?php echo $koppelOpleidingCluster2->getCluster(); ?></td>
</tr>
<?php
} // <-----
$prevCluster = $koppelOpleidingCluster2->getClusterId(); // <-----
?>
<tr>
<td style="display:none;"> <input type="hidden" name="opleidingId" value=" <?php echo $koppelOpleidingCluster2->getOpleidingId(); ?>"></td>
<td name="opleiding"> <?php echo $koppelOpleidingCluster2->getOpleiding(); ?></td>
</tr>
<?php
}
?>
答案 1 :(得分:-1)
array_unique($ array,SORT_REGULAR)使用此