2015-04-01 64 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)); 
相關問題