php - 通过给定键从对象数组中删除一个元素

php - remove an element from array of objects by given key

我有一个 class:

class user{

    public $login = "userlogin";
    public $pass  = "userpass";

    function __construct() {
        $this->login = $_POST['slogin'];
        $this->pass = $_POST['spass'];
    }
    function display() {
        return $this->login;
    }
}

我正在将它的所有实例写入一个文件:

function dataStore ($obj, $dataFile) {
    $dataTmp .= serialize($obj);
    file_put_contents($dataFile, $dataTmp);
}

if (isset($_POST['submit'])) {

        $newuser = new user();
        $users[ $newuser->login ] = $newuser;       

        dataStore($users, $dataFile);                    
    }

所有这些都有效,现在我想通过提供用户名($class->login)来删除一些用户,所以我写道:

function deleteUser($name,$array) {
   unset($array[$name]);        
}

if (isset($_POST['submitDelete'])) {

        deleteUser($_POST['sdelete'],$users);
        dataStore($users, $dataFile);    
    }

html :

<div class="box-login" id="tab-login">  
    <form  method="POST" action="" >
        <p> enter username: <input type="text" name="slogin"/></p>
        <p> enter password: <input type="text" name="spass"/></p>
        <p> create new account -> <input type="submit" name="submit" /></p>
     </form>
</div>

<div class="box-deleteUser" id="tab-deleteUser">
    <form  method="POST" action="" >
        <p> <input type="text" name="sdelete" /> <input type="submit" name="submitDelete" value="usuń"/> </p>
     </form>
</div>

但这不起作用,为什么?我不知道怎么了,你能指点我吗?

看起来您需要 return 来自 deleteUser() 函数的数组,然后在您的 dataStore() 函数中使用它。

编辑 - 加上约瑟夫所说的:)

所以,就像 Paul Riley 说的那样,我们必须 return 值,或者通过对函数的引用传递数组(默认它是通过值传递), 为此,我们在变量名前放置一个符号 (-> '&'):

function deleteUser($name,&$array) {   // 
   unset($array[$name]);

}