2015-04-01 2 views
0
stdClass Object ([id] => 11 [type] => 5 [color_a] => 57 [color_b] => 3 [date] => 2) 

Как проверить, есть ли у объекта атрибуты, содержащие CONTIN строку «цвет»?Проверьте, не содержит ли объект объект, соответствующий строке

Я пробовал с 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

ответ

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) 

И если вы просто хотите использовать его, чтобы проверить ИСТИНА или ЛОЖЬ, как с in_array() вам не нужно перевернуть его обратно, и вы можете просто использовать его как это:

if(preg_grep("/\bcolor/", array_keys((array)$o))) 
    echo "match"; 
+0

Thats большой материал и работы Как колдовство! – Mike

+0

@Mike Добро пожаловать! Хороший день: D – Rizier123

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)); 
Смежные вопросы