2012-09-01 169 views
0

如何刪除現有陣列(請參閱下面的代碼)?,我知道CodeIgniter是一個很好的框架,但我想了解CI如何管理$ this-> data方法。PHP刪除現有陣列

我的代碼:

<?php 
class simple { 

    public $data; 

    public function set($key, $value) 
    { 
     $this->data[$key] = $value; 
    } 
} 

class testa extends simple { 

    function yoop() 
    { 
     $this->set('name', 'excelent'); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 

    function noop() 
    { 
     $this->set('level', 'normal'); 
     $this->set('power', 'high'); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 
} 

$testa = new testa; 
$testa->yoop(); 
$testa->noop(); 

/* EOF */ 

當前結果:

Array 
(
    [name] => excelent 
) 
Array 
(
    [name] => excelent 
    [level] => normal 
    [power] => high 
) 

我要刪除現有陣列,而最終的結果我想要的是:

Array 
(
    [name] => excelent 
) 
Array 
(
    [level] => normal 
    [power] => high 
) 

回答

0
$testa = new testa; 
$testa->yoop(); 

$testa1 = new testa; 
$testa1->noop(); 
+1

謝謝,但我認爲如果我創建新的類,CPU內存將耗盡,任何其他解決方案? – oknoorap

0

你不能那樣做,

您試圖訪問相同的數組,但期望得到不同的結果? 如果你真的想這樣做(不知道爲什麼),你可以重新設置磁盤陣列,可以使用兩個實例

只是

<?php 
class simple { 

    public $data; 

    public function set($key, $value) 
    { 
     $this->data[$key] = $value; 
    } 

    public function reset(){ 
     this->data = array(); 
    } 
} 

class testa extends simple { 

    function yoop() 
    { 
     $this->reset(); 
     $this->set('name', 'excelent'); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 

    function noop() 
    { 
     $this->reset(); 
     $this->set('level', 'normal'); 
     $this->set('power', 'high'); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 
} 

$testa = new testa; 
$testa->yoop(); 
$testa->noop(); 

/* EOF */ 
+0

是的,你的解決方案是有道理的,而不是耗盡內存,謝謝.. – oknoorap

+0

@oknoorap:這每次創建一個新的數組 - 每次創建一個新的'class'時,@ Ashwini的答案有什麼不同?在這兩種情況下,先前的實例都將被垃圾收集。 – Eric

+1

如果你print_r或var_dump $ testa,你的內存將再次創建新的實例.. – oknoorap

2

我實在不明白你的目標是什麼了這裏。爲什麼不乾脆:

class testa { 
    public $data; 

    function yoop() 
    { 
     $this->data = array('name' => 'excellent'); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 

    function noop() 
    { 
     $this->data = array(
      'level' => 'normal', 
      'power' => 'high' 
    ); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 
} 
+0

如果我這樣做,我相信這不是一個框架,並浪費時間,如果你寫10000行代碼... – oknoorap

+0

:)但我認爲,你的答案也是有意義的...... – oknoorap

+3

「_i相信這不是一個framework_」 - 我不知道你想說什麼。您聽起來像是在使用框架作爲流行語。 – Eric

0

嘗試創建另一個函數以您的testa類:

function qoop(){ 
    unset($this->data['name']); // this function remove $data key by 'name' 
    $this->set('level', 'normal'); 
    $this->set('power', 'high'); 
    echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
} 

的結果將是:

Array 
(
    [name] => excelent 
) 
Array 
(
    [level] => normal 
    [power] => high 
) 

原始代碼

<?php 
class simple { 

    public $data; 

    public function set($key, $value) 
    { 
     $this->data[$key] = $value; 
    } 
} 

class testa extends simple { 

    function yoop() 
    { 
     $this->set('name', 'excelent'); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 

    function noop() 
    { 
     $this->set('level', 'normal'); 
     $this->set('power', 'high'); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 

    function qoop() 
    { 
     unset($this->data['name']); // this function remove $data key by 'name' 
     $this->set('level', 'normal'); 
     $this->set('power', 'high'); 
     echo '<pre>'.print_r($this->data, TRUE).'</pre>'; 
    } 

} 

$testa = new testa; 
$testa->yoop(); 
$testa->qoop(); 

/* EOF */