Есть ли способ получить доступ к деталям логического объекта, переданного в 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? В любом случае это просто сахар для ряда других подходов, которые могут быть приняты, было бы просто стыдно, если у них нет классического синтаксиса данных.
Если вы имеете в виду 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 }
Других решений пока нет …