检查对象是否包含与字符串匹配的属性

时间:2015-04-01 17:11:54

标签: php

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上。

如果可能,没有循环:)

3 个答案:

答案 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));