2015-04-01 48 views
0
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

可能重复:http://stackoverflow.com/questions/2471120/php-function-array-key-exists-and-regular-expressions – YyYo 2015-04-01 17:39:08

回答

0

这应该为你工作:

(这里我只投了对象的数组,并与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"; 
+0

那是伟大的东西,作品像一个魅力! – Mike 2015-04-01 17:27:42

+0

@Mike不客气!祝你有美好的一天:D – Rizier123 2015-04-01 17:28:03

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 

希望它有一点帮助。

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)); 
相关问题