簡體   English   中英

搜索對象數組並返回新的對象數組

[英]Search an array of object and return new array of objects

我需要一些幫助。 我一直在試圖解決這個問題,但我不能,所以我想要做的是我試圖將對象數組 blackListUser 與 contactUsers 進行比較。 如果有匹配,我想返回新用戶的白名單,而不是最后一個預期的新數組的后備用戶。

for($counter = 0; $counter < count($blackListUsers); $counter++) {
    how i can check here
}


ContactUsers
Array
(
    [0] => stdClass Object
        (
            [user_id] => 2
            [full_name] => User B
            [image] => 1582735876user-a.png
        )

    [1] => stdClass Object
        (
            [user_id] => 3
            [full_name] => User C
            [image] => 1582735876user-a.png
        )

    [2] => stdClass Object
        (
            [user_id] => 4
            [full_name] => User D
            [image] => 1582735876user-a.png
        )

    [3] => stdClass Object
        (
            [user_id] => 5
            [full_name] => User E
            [image] => 1582735876user-a.png
        )

    [4] => stdClass Object
        (
            [user_id] => 6
            [full_name] => User F
            [image] => 1582735876user-a.png
        )

    [5] => stdClass Object
        (
            [user_id] => 8
            [full_name] => User G
            [image] => 1582735876user-a.png
        )

)


blackListUsers
Array
(
    [0] => stdClass Object
        (
            [user_id] => 2
            [full_name] => User B
            [image] => 1582735876user-a.png
        )

    [1] => stdClass Object
        (
            [user_id] => 3
            [full_name] => User C
            [image] => 1582735876user-a.png
        )

)

expected new array
 Array
    (
        {
                "user_id": "4",
                "name": "User D",
                "image": "1582735876user-a.png"
            },
            {
                "user_id": "5",
                "name": "User E",
                "image": "1582735876user-a.png"
            },
            {
                "user_id": "6",
                "name": "User F",
                "image": "1582735876user-a.png"
            },
            {
                "user_id": "8",
                "name": "User G",
                "image": "1582735876user-a.png"
            }

    )
<?php
$user1->user_id = 2;
$user1->full_name = 'User B';
$user1->image = '1582735876user-a.png';

$user2->user_id = 3;
$user2->full_name = 'User C';
$user2->image = '1582735876user-a.png';

$user3->user_id = 4;
$user3->full_name = 'User D';
$user3->image = '1582735876user-a.png';

$user4->user_id = 3;
$user4->full_name = 'User C';
$user4->image = '1582735876user-a.png';

$users = [$user1, $user2, $user3];
$blackListedUsers = [$user4];

$res = array_filter($users, function ($user) use ($blackListedUsers) {
    return !in_array($user, $blackListedUsers);
});

var_dump($res);

array_filter匿名函數一起使用 in_array 閱讀in_array文檔以查看它是否符合您的需要,因為它正在比較兩個對象,您可以使用自定義函數,該函數僅測試兩個對象的 id 是否相等。

更新

或者更適合初學者的代碼版本:

<?php
$user1->user_id = 2;
$user1->full_name = 'User B';
$user1->image = '1582735876user-a.png';

$user2->user_id = 3;
$user2->full_name = 'User C';
$user2->image = '1582735876user-a.png';

$user3->user_id = 4;
$user3->full_name = 'User D';
$user3->image = '1582735876user-a.png';

$user4->user_id = 3;
$user4->full_name = 'User C';
$user4->image = '1582735876user-a.png';

$users = [$user1, $user2, $user3];
$blackListedUsers = [$user4];

$validUsers = [];
foreach ($users as $user) {
    if (!isBlacklisted($user, $blackListedUsers)) {
        $validUsers[] = $user;
    }
}

var_dump($validUsers);

function isBlacklisted($user, $blackListedUsers) {
    foreach ($blackListedUsers as $blackListedUser) {
        if ($user->user_id == $blackListedUser->user_id) {
            return true;
        }
    }

    return false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM