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