[英]Matched results in nested foreach loop - PHP
我要查询两组数据,第一组包含通讯簿的完整列表,第二组仅包含用户已预订的那些。 我想显示完整列表,仅突出显示用户已订阅的列表。 到目前为止,我的代码返回通讯录的完整列表以及用户通讯录(红色),但显示重复项。 任何人都可以帮助删除重复项吗?
<?php
foreach($ch2_response as $ub){
if($ub['visibility'] == 'Public' ){
echo $ub['name'] . '<br>';
}
foreach($ch1_response as $ab){
if($ab['visibility'] == 'Public' && $ab['name'] == $ub['name'] ){
echo '<p style="color:red;">' . $ab['name'] . '</p>';
}
}
}
?>
该代码将是这样的(包括示例值)
<?php
$ch1_response = [
["name" => "Book 1", "visibility" => "Public"],
];
$ch2_response = [
["name" => "Book 1", "visibility" => "Public"],
["name" => "Book 2", "visibility" => "Public"],
["name" => "Book 3", "visibility" => "Private"],
];
$userBooks = [];
foreach ($ch1_response as $ub) {
if ($ub['visibility'] == "Public") {
$userBooks[] = $ub['name'];
}
}
usort($ch2_response, function ($a, $b) {
return (strcmp($a['name'], $b['name']));
});
foreach ($ch2_response as $ab) {
if ($ab['visibility'] == "Public") {
if (in_array($ab['name'], $userBooks)) {
echo '<p style="color:red;">' . $ab['name'] . '</p>';
} else {
echo '<p>' . $ab['name'] . '</p>';
}
}
}
?>
首先,将所有公共用户书籍名称保存在一个数组$userBooks
。 然后,我们使用usort
对$ch2_response
进行排序-我们将书名与strcmp
进行比较。 然后,您遍历所有书籍并检查$userBooks
数组中是否存在当前书籍$ab['name']
。 如果是,请以红色显示书名,否则,请以无颜色显示它。
您可以先比较两个数组,然后获取新数组中的唯一值,然后使用该新数组打印值。
$new_array = array_unique( array_merge($ch2_response, $ch1_response) );
print_r($new_array);
我希望这能帮到您!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.