2

クラスのメンバー配列変数の最初の値の設定を解除したいのですが、次のことができません。

<?php

class A
{
    public  function fun()
    {       
        $this->arr[0] = "hello";
    }

    public $arr;
}


$a = new A();
$a->fun();
$var ="arr";

unset($a->$var[0]);  //does not unset "hello" value

print_r($a);

Googleで検索したところ、解決策が見つかりませんでした。最初の値を動的に削除するにはどうすればよいですか?

4

4 に答える 4

2

次のことを試してください。

unset($a->{$var}[0]);

コードの問題は、PHPがメンバー変数$var[0](であるnull)にアクセスしようとし、ではないこと$varです。

于 2013-03-12T10:24:25.037 に答える
0

$ arrはクラスAのメンバーであり、パブリックとして宣言されているため、直接使用できます。

$a = new A();
$a->fun();
unset $a->arr[0];

ただし、数値インデックス付き配列の場合、設定を解除すると問題が発生する可能性があることに驚かれることでしょう。

あなたの配列がそのようなものだとしましょう。

$arr = ["zero","one","two","three","four"];
unset($arr[2]);       // now you removed "two"
echo $arr[3];         // echoes three

これで、配列は["zero"、 "one"、undefined、 "three"、"four"]になります。

$ arr [2]は存在せず、未定義であり、残りはインデックスが再作成されません...

以下の方法を使用する数値インデックス付き配列の場合は、より適切です。

$arr = ["zero","one","two","three","four"];
array_splice($arr,2,1);  // now you removed "two" and reindexed the array 
echo $arr[3];            // echoes four...

これで、配列は["zero"、 "one"、 "three"、"four"]になります。

于 2013-03-12T10:54:31.550 に答える
0

あなたが試すことができますarray_shift

array_shift($a->{$var});

この関数は、値への参照を使用し、配列の先頭から値を削除 (および返し) ます。

于 2013-03-12T10:25:38.033 に答える
0
<?php

  class A
 {
   public  function fun()
   {       
      $this->arr[0] = "hello";
   }

   public $arr;
}


 $a = new A();
 $a->fun();

 // no need to take $var here 
 // you can directly access $arr property wihth object of class

 /*$var ="arr";*/

 // check the difference here  
 unset($a->arr[0]);  //unset "hello" value

 print_r($a);

?>

これを試して

于 2013-03-12T10:27:45.820 に答える