PHP - как искать в ключе и значениях строку? - PullRequest
0 голосов
/ 11 октября 2011

Я пытаюсь найти строку в CSS, которая была преобразована в массив.Что я хочу сделать, так это найти строку в ключе или значении массива и показать блок css.

Я пытался несколько часов, но не смог добиться прогресса.

Есть предложения?

Код генерируется с использованием этого синтаксического анализатора PHP css в http://pastebin.com/fstMwd3q

Пример ниже - найти блок css со строкой «upload» и показать каждый из блоков css, который имеет это.Другой пример - найти все css, которые имеют встроенный блок.

Array
(

    [.qq-upload-cancel] => Array
        (
            [font-size] => 11px
        )

    [.qq-upload-failed-text] => Array
        (
            [display] => none
        )

    [.qq-upload-fail .qq-upload-failed-text] => Array
        (
            [display] => inline
        )

    [span.iconmorehelp] => Array
        (
            [display] => inline-block
            [height] => 18px
            [width] => 18px
        )

    [a.iconmoreinfo] => Array
        (
            [height] => 18px
            [width] => 18px
            [display] => inline-block
            [margin-top] => 3px
            [margin-right] => 3px
        )
)

* Вот мой код, основанный на решении из willium ниже.Если кто-то может сделать это проще, пожалуйста, напишите !!*

<code>foreach($array as $key=>$item) {
    global $needle;
    $found = false;
    $result1='';
    $result2='';

    $result1=$key;
    if(strpos($key, $needle)) {
        $found=true;
    }
    foreach($item as $key=>$value) {        
        $result2.= $key . ":";
        $result2.= $value .":\n";
        if(strpos($key, $needle) || strpos($value, $needle)) {
            $found=true;
        }

    }
    if($found) echo "<pre>" . $result1 . "\n{\n" . $result2 . "\n}\n\n
";}

Ответы [ 2 ]

2 голосов
/ 11 октября 2011

Вы можете перебирать массив и анализировать значение ключа с помощью цикла foreach.

foreach($array as $item) {
    foreach($item as $key=>$value) {
        echo $key;
        echo $value;
    }
}
1 голос
/ 11 октября 2011

Самый простой способ достичь желаемого - добавить еще один метод в ваш класс cssparser.

/**
*    Returns an arrray of rule names containing
*    the text in $cssFrag
**/ 
function findByCss($cssFrag)
{
    $result = null;
    $cssFrag = strtolower($cssFrag);
    $css = $this->css;
    foreach($css as $selector => $rule){
        if(stripos($selector, $cssFrag)){
            $result[] = $selector;
        } else {
           foreach($rule as $key => $property){
               if(stripos($key, $cssFrag) || stripos($property, $cssFrag)){
                   $result[] = $selector;
               }
           }
        }
    }
    return $result;
}

Тогда вы можете сделать $rules = $cssparser->findByCss('inline');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...