2011-10-11 9 views
-1

私は、CSSに配列に変換された文字列を見つけようとしています。私がしたいのは、配列のキーまたは値内の文字列を見つけ、CSSブロックを表示することです。PHP - 文字列のキーと値の両方を検索するには?

私は数時間試しましたが、何も進展しません。

提案がありますか?

コードhttp://pastebin.com/fstMwd3q

でこのPHP CSSのパーサーを使用して生成される以下の実施例は、文字列「アップロード」とCSSのブロックを見つけ、それを持っているCSSのブロックのそれぞれを示しています。もう1つの例は、インラインブロックを持つすべての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からの解決策に基づいています。誰かがこれを簡単にすることができるなら、投稿してください! *

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 </pre>"; 
} 
+0

が重複する可能性[私はオブジェクト内の多次元配列の文字列検索を行うことができますどのように?](http://stackoverflow.com/questions/7719968/how-can -i-do-a-string-multidimensional-array-objects-within-object) – deceze

+0

再帰関数を作成 – Daniel

+0

配列ウォーク関数で試しましたか? – punit

答えて

2

することができます配列をループし、foreachループでキー値を解析します。

foreach($array as $item) { 
    foreach($item as $key=>$value) { 
     echo $key; 
     echo $value; 
    } 
} 
+0

美しい!それはとても簡単でした!!!男...一日中私を連れて行きました。そして私はそれを働かせました!少なくとも第1の部分。今すぐすべてのファイルを検索して検索してください。これは最高です。ありがとう! –

+0

@scott何を返すのですか?あなたが探しているテキストを含むすべてのCSSルール? – vascowhite

+0

@vascowhiteはい私はテキストのCSS規則を見つける必要があります。 –

1

最も簡単な方法は、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');

+0

申し訳ありません...私はもっと明確にしています。これはクラス名またはクラスID内でも検索できますか?今すぐ、あなたが提案したコードは、ルールを検索することしかできません。 –

+0

これで、class/id nameを含むCSSルール全体が検索されます。 – vascowhite

+0

すごい!おかげで多くのvascowhite!私は、ディレクトリ/サブディレクトリ内のすべてのCSSファイルを解析してCSSブロックを表示するために、CSSパーサーコードとディレクトリスキャンコードを組み合わせることができました。すごい! cssパーサはhttp://www.phpclasses.org/package/1289-PHP-CSS-parser-class.htmlにあり、ディレクトリスキャナはhttp://www.designerstalk.com/forums/programming/8005-phpにあります。 -finding-occurences-string-fileです。html –

関連する問題