我有这样的功能:
// merge - merge two or more given trees and returns the resulting tree
function merge() {
if ($arguments = func_get_args()) {
$count = func_num_args();
// and here goes the tricky part... :P
}
}
我可以使用get_class()
,is_*()
或甚至ctype_*()
之类的函数来检查所有给定的参数是否属于同一类型/类(在本例中为类)但操作(如据我所知,在单一元素层面。
我理想的做法是类似于in_array()
函数但比较数组中所有元素的类,所以我会做类似in_class($class, $arguments, true)
的事情。
我可以这样做:
$check = true;
foreach ($arguments as $argument) {
$check &= (get_class($argument) === "Helpers\\Structures\\Tree\\Root" ? true : false);
}
if ($check) {
// continue with the function execution
}
所以我的问题是......是否有定义的功能?或者,至少,一种更好/更优雅的方法来实现这一目标?
答案 0 :(得分:1)
您可以使用array_reduce(...)
在每个元素上应用该函数。如果你的目标是写一个单行,你也可以使用create_function(...)
。
array_reduce的示例
<?php
class foo { }
class bar { }
$dataA = array(new foo(), new foo(), new foo());
$dataB = array(new foo(), new foo(), new bar());
$resA = array_reduce($dataA, create_function('$a,$b', 'return $a && (get_class($b) === "foo");'), true);
$resB = array_reduce($dataB, create_function('$a,$b', 'return $a && (get_class($b) === "foo");'), true);
print($resA ? 'true' : 'false'); // true
print($resB ? 'true' : 'false'); // false, due to the third element bar.
?>
答案 1 :(得分:0)
我认为这个SO question可以满足您的要求。它使用了ReflectionMethod