stdClass Object ( [id] => 11 [type] => 5 [color_a] => 57 [color_b] => 3 [date] => 2 )
如何检查对象是否具有包含字符串的属性" color" ?
我尝试使用array_diff_key和array_filter,但我不能使用ARRAY_FILTER_USE_KEY,因为它运行在PHP 5.4上。
如果可能,没有循环:)
答案 0 :(得分:1)
这应该适合你:
(这里我只是将对象转换为数组并使用preg_grep()
中的array_keys()
进行搜索。然后我只需用array_flip()
将数组翻转回来。
$result = array_flip(preg_grep("/\bcolor/", array_keys((array)$o)));
print_r($result);
输出:
Array ( [color_a] => 2 [color_b] => 3 )
如果您只是想使用它来检查TRUE或FALSE,就像使用in_array()一样,您不需要将其翻转,您可以像这样使用它:
if(preg_grep("/\bcolor/", array_keys((array)$o)))
echo "match";
答案 1 :(得分:0)
...您好
function isKeyExists($key,$array){
$arr = preg_grep('/.*'.$key.'.*/',array_keys($array));
if(count($arr)){
return true;
}
return false;
}
$arr = Array('id'=>'11','type'=>5,'color_a'=>57,'color_b'=>3,'date'=>2);
isKeyExists('color_',$arr); // return boolean if exists or not
希望它有所帮助。
答案 2 :(得分:0)
没有正则表达式解决方案:
$std = new StdClass();
$std->id = 11;
$std->type = 5;
$std->color_a = 57;
$std->color_b = 3;
$std->date = 2;
$result = array();
$searchFor = 'color';
array_map(function($value) use(&$result, $searchFor){
if(strpos($value, $searchFor) !== false){
$result[] = $value;
}
}, array_keys((array)$std));
var_dump(count($result));