簡體   English   中英

如何從foreach循環php中的對象數組中刪除對象

[英]how to remove object from array of objects in foreach loop php

我有一個從數據庫返回的users對象,如下所示:

[
    {
        "id":1,
        "name":"Bob",
        "category":"admin",
        "email":"test1@test.com",
        "phone":"123456789",
        "gender":"male",
    },
    {
        "id":2,
        "name":"John",
        "category":"user",
        "email":"john@test.com",
        "phone":"123456789",
        "gender":"male",
    },
    {
        "id":3,
        "name":"Jane",
        "category":"admin",
        "email":"jane@test.com",
        "phone":"123456789",
        "gender":"female",
    },
]

現在,我想循環遍歷所有users對象,並刪除其category屬性為user所有用戶,以便生成的users對象僅保留為admin類別。

我想用foreach循環來做這個。 請問我該如何解決這個問題或者我有什么更好的方法來實現這個目標?

假設數組是json格式,一行代碼:

$users = array_filter(json_decode($users), function($user) {
    return $user->category != 'user';
});

如果它已經是一個有效的php數組,只需刪除json_decode()

我猜這個數組是JSON格式的嗎? 無論如何..我修復了你的無效JSON,所以你應該能夠看到它是如何完成的。

$json = '

[{
    "id": 1,
    "name": "Bob",
    "category": "admin",
    "email": "test1@test.com",
    "phone": "123456789",
    "gender": "male"
}, {
    "id": 2,
    "name": "John",
    "category": "user",
    "email": "john@test.com",
    "phone": "123456789",
    "gender": "male"
}, {
    "id": 3,
    "name": "Jane",
    "category": "admin",
    "email": "jane@test.com",
    "phone": "123456789",
    "gender": "female"
}]

';

$array = json_decode($json, true); //Fixed and converted JSON into PHP Assoc Array 

foreach($array as $k=>$v) { 
    foreach ($array[$k] as $key=>$value) { 
      if ($key === "category" && $value === "user") { //If Value of 2D is equal to user and cat

          unset($array[$k]); //Delete from Array 
      }
    }  
}

var_dump($array); //Output Array

產量

array(2) {
    [0] => array(6) {
        ["id"] => int(1)["name"] => string(3)
        "Bob" ["category"] => string(5)
        "admin" ["email"] => string(14)
        "test1@test.com" ["phone"] => string(9)
        "123456789" ["gender"] => string(4)
        "male"
    }[2] => array(6) {
        ["id"] => int(3)["name"] => string(4)
        "Jane" ["category"] => string(5)
        "admin" ["email"] => string(13)
        "jane@test.com" ["phone"] => string(9)
        "123456789" ["gender"] => string(6)
        "female"
    }
}

編輯

*正如@sevavietl在評論中指出的那樣,如果數組的任何其他元素被稱為user,那么這將被刪除。 我已經將代碼更改為現在測試密鑰(類別)以及值。 *

您的輸入看起來像JSON ,所以你可以使用json_decode功能,使其成為一個數組,你可以foreach ,你可以編碼( json_encode )回JSON ,如果你想相同的輸出。


以下代碼對您有用:

<?php
// $json = output from your db
$json_output = json_decode($json, true);

foreach ($json_output as $user) {
    if ($user['category'] == 'admin') { // or it may be $user['category'] != 'user'
        $user_output[] = $user;
    }
}
print_r($user_output);
print_r(json_encode($user_output, true)); // if you want json output    
?>

SQL

您還可以在SQL查詢中添加WHERE語句。 它可能如下所示:

SELECT * FROM users WHERE category = 'admin'

當然查詢取決於您在表中的名稱。 有關SELECT查詢的更多信息,請參閱下面的手冊。


手冊

有關使用過的方法的更多信息,請參閱下


在線編譯

你可以在這里查看它的工作原理

如果您只想刪除“user”類別,則只需獲取密鑰並為刪除該類別創建條件,並將類別“admin”放在該新數組上。 看看這個:

$json = '
[{
    "id": 1,
    "name": "Bob",
    "category": "admin",
    "email": "test1@test.com",
    "phone": "123456789",
    "gender": "male"
}, {
    "id": 2,
    "name": "John",
    "category": "user",
    "email": "john@test.com",
    "phone": "123456789",
    "gender": "male"
}, {
    "id": 3,
    "name": "Jane",
    "category": "admin",
    "email": "jane@test.com",
    "phone": "123456789",
    "gender": "female"
}]';

$arr = json_decode($json, true);

$newArr = array();
foreach($arr as $key => $value) {
    if($value["category"] == "admin") {
        $newArr[] = $value;
    }
}

echo '<pre>';
    print_r($newArr);
echo '</pre>';

暫無
暫無

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

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