Awa*_*ine 6 php arrays foreach loops object
我有一个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",
},
]
Run Code Online (Sandbox Code Playgroud)
现在我想循环遍历所有users对象并删除其category属性为的所有用户,user以便生成的users对象仅保留admin类别.
我想用foreach循环来做这个.请问我该如何解决这个问题,或者我有什么更好的方法来实现这个目标?
假设数组是json格式,一行代码:
$users = array_filter(json_decode($users), function($user) {
return $user->category != 'user';
});
Run Code Online (Sandbox Code Playgroud)
如果它已经是一个有效的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
Run Code Online (Sandbox Code Playgroud)
输出
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"
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
*正如 @sevavietl 在评论中指出的那样,如果数组的任何其他元素被称为 user,那么它将被删除。我已更改代码以现在测试键(类别)以及值。*