繁体   English   中英

嵌套的foreach循环中的匹配结果-PHP

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM