【问题标题】:php - remove an element from array of objects by given keyphp - 通过给定键从对象数组中删除一个元素
【发布时间】:2016-10-25 15:29:34
【问题描述】:

我有一堂课:

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>

但这不起作用,为什么?我无法弄清楚什么是错的,你能以某种方式指出我吗?

【问题讨论】:

  • 为什么你认为它不起作用?你得到什么错误信息?你能告诉我们$users数组的内容吗?
  • deleteUser() 需要首先从您保存的文件中检索$users,然后更改此数组,然后再次dataStore()。当前您调用 deleteUser($_POST['sdelete'], $users),但在此上下文中无法访问 $users
  • 不,事实上是这样。我只是没有粘贴这部分代码。我的错。

标签: php unset


【解决方案1】:

看起来您需要从 deleteUser() 函数返回数组,然后在 dataStore() 函数中使用它。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-11-17
      • 2016-02-04
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 2020-01-31
      相关资源
      最近更新 更多