как удалить объект из массива объектов в цикле foreach 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 "объект" и удалить всех пользователей, чьи - это user так что в результате .

Я хочу сделать это с помощью цикла foreach. пожалуйста, как мне это сделать или какими лучшими способами я могу это сделать?

4 ответов


Я предполагаю, что массив в формате 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 в комментариях, если какой-либо другой элемент массива был вызван пользователем, то это будет удалено. Я изменил код, чтобы теперь проверить ключ (категорию), а также Значение. *


предполагая, что массив находится в формате json, код одной строки:

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

Если вместо этого уже действительный массив php просто удалите json_decode()


Если вы просто хотите удалить категорию "пользователь", вам просто нужно получить ключ и сделать условие для удаления этой категории и поместить категорию" администратор " в этот новый массив. Взгляните на это:

$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>';

ваш вход выглядит так: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'

Of запрос курса зависит от имен, которые у вас есть в таблице. Подробнее о SELECT запрос вы можете прочитать в инструкции ниже.


инструкции

подробнее о используемых методах вы можете прочитать ниже:


компилятор онлайн

вы можете проверить как он работает здесь