2015-06-02 68 views
0

有沒有辦法訪問傳遞給ArrayObject的布爾值的詳細信息,以便與數組中的每個元素進行比較?PHP將布爾值傳遞給ArrayObject以進行內部比較

我已經開始在PHP的數據框上工作,似乎已經打了這個玻璃天花板。

樣品的編號:

<?php 

class DataFrame extends ArrayObject { 
    public function offsetGet($key) { 
     if (is_bool($key)) { 
      echo "Passed a boolean: {$key}\n"; 
     } else { 
      echo "Comparing: {$key}\n"; 
     } 
    } 
} 

只是一個簡單的情況下的代碼:

$df = new DataFrame(); 
$df['hello'] = 'world'; 
$df[$df['hello'] == 'world']; 

將輸出(對於任何非空,非假,非零比較):

Comparing: hello 
Passed a boolean: 

否則:

Comparing: hello 
Passed a boolean: 1 

無論哪種方式,我無法使用這種方法進行比較。


是否有一個接口,我可以實現爲了獲得訪問布爾比較方法或類似這樣的PHP無法觸及?無論哪種方式,這只是可以採取的其他一些方法的糖,沒有經典的數據框語法只是一個恥辱。

回答

0

如果您的意思是類似於R的數據框架語法,我很遺憾地說PHP本身不會暴露這樣的接口,但是沒有任何東西阻止您實現它。

您將從此得到最接近的是array_filter函數。

對於PHP 5.3+,你可以這樣做:

$data = array('hello', 'world'); 
$selected = array_filter($data, function($val) { 
    return $val === 'world'; 
}); 
var_dump($selected); // will output: array(1) { 0 => world }