我目前正在尝试使用foreach来使用我的事件模型中的关系返回所有地址。一切都很好,返回所有地址但会返回重复的结果。我尝试了array_unique,但不确定我的语法是否正确。
<?php
foreach ($data->events as $address) {
//array_unique($address, SORT_REGULAR);
echo $address->getAddressString() ."<br/> <br/>";
}
?>
答案 0 :(得分:6)
// First Store data in $arr
$arr = array();
foreach ($data->events as $address) {
$arr[] = $address->getAddressString();
}
$unique_data = array_unique($arr);
// now use foreach loop on unique data
foreach($unique_data as $val) {
echo $val;;
}
答案 1 :(得分:1)
您可以将每个唯一元素添加到新数组中,然后查看它们是否与in_array()
一起存在:
$uniques = [];
foreach($data->events as $address){
if(!in_array($address->getAddressString(), $uniques)){
$uniques[] = $address->getAddressString();
echo $address->getAddressString()."<br><br>";
}
}
答案 2 :(得分:1)
如果您想过早优化,那么有一种更快捷的方法。
<?php
$arr = array();
foreach ($data->events as $address) {
$arr[$address->getAddressString()] = 'a'; // value doesn't matter
// using inherent uniqueness of keys.
}
// $addrs = array_keys($arr);
// optionally, take all those array keys and put them in values.
// keys would become regular numeric keys
?>
这应该比这里的任何其他答案运行得更快。但是,只有处理大量数据才会有所作为。
如果您想要回音,如果您不在上面,则需要array_keys
。这是一行:
echo implode(', ',array_keys($arr)); // comma separated list of unique values
或者,对于排序:
$addrs = array_keys($arr);
sort($addrs);
echo implode(', ',$addrs); // sorted list
最后,我想补充一点,应该首先从数据模型中获取唯一的,有序的结果。数据库在简单的任务上更快更好,比如订购独特的结果,而不是PHP代码。
SELECT DISTINCT `address` FROM `table`
WHERE `city` LIKE 'Lodi'
ORDER BY 'address' ASC
答案 3 :(得分:0)
array_unique
应该这样做。试试这个:
<?php
foreach (array_unique($data->events) as $address) {
echo $address->getAddressString() ."<br/> <br/>";
}
?>
答案 4 :(得分:0)
你可以试试这个 -
<?php
$all_addresses= array();
foreach ($data->events as $address) {
$all_addresses[]= $address->getAddressString();
}
$all_addresses= array_unique($all_addresses);
foreach($all_addresses as $val) {
echo $val . "<br/> <br/>";
}
?>
或者
而不是
foreach($all_addresses as $val) {
echo $val . "<br/> <br/>";
}
待办事项
echo implode('<br/> <br/>', $all_addresses);
答案 5 :(得分:0)
即使问题不同,我也同意史蒂夫。您应该调整查询。它更快,更易读和可维护。你不想做任何你不需要做的事情。
如果我正确地收集了你必须与表格有关系。大。尝试这样的事情:
$var1 = YourModel::model()
->with('address_table')
->findAllByAttributes(array(-optional if you want certain columns-),
array('condition'=>'`type` LIKE :type AND `typeId` = :typeId AND `suggestionId` IS NULL', 'params'=>array(':type'=>$_GET['type'], ':typeId'=>$_GET['typeId']), 'group'=>'address_table.`column`'));
这里最重要的是'group'命令,它与名称一样,表示分组结果并返回唯一的结果。请确保正确添加前缀,表名称或别名,具体取决于您使用的内容。 希望它有所帮助。