-1

次のように、多次元配列をウォークスルーし、アルファベットで始まらない場合はタイトルのみを確認する必要があります。

Array
(
    [0] => Array
        (
            [letter] =>  
            [id] => 176
        )

    [1] => Array
        (
            [letter] => "
            [id] => 175
        )
.....etc  

だから私はa-zA-zで始まらない場合は文字だけをチェックする必要があります、私はそれをやってみましたが、それでも何かが欠けています、、

$notMatch = array();
foreach ($data as $value) {
    foreach ($value as $item['title']=>$d) {

       if(!preg_match('/^[a-zA-Z]$/',$d)){
           $notMatch[]=$d;
       }
    }
}
4

2 に答える 2

1

以下のURLを参照してください。非常に役立つと思います。

アップデート:

多次元配列でpreg_matchを使用して、キー値配列を返す

それを試してみてください

<?php
$data = array(
    "abc"=>array(
            "label" => "abc",
            "value" => "def",
            "type" => "ghi",
            "desc" => "jkl",
            ),
    "def"=>array(
            "label" => "mno",
            "value" => "qrs",
            "type" => "tuv",
            "desc" => "wxyz",
            ),
    );

$matches = array();
$pattern = "/a/i";  //contains an 'a'
//loop through the data
foreach($data as $key=>$value){
    //loop through each key under data sub array
    foreach($value as $key2=>$value2){
        //check for match.
        if(preg_match($pattern, $value2)){
            //add to matches array.
            $matches[$key]=$value;
            //match found, so break from foreach
            break;
        }
    }
}
echo '<pre>'.print_r($matches, true).'</pre>';
?>
于 2012-09-02T07:06:25.347 に答える
1

1つのforeachループを削除し、preg_matchパターンを変更し、文字列/行の開始と文字列/行のアンカーの終了を削除しました。

これは私がそれをした方法です:

// I'm assuming your data array looks something like this:
$data = array(array('title'=>'fjsdoijsdiojsd', 'id'=>3),
                    array('title'=>'oijijsd', 'id'=>5),
                    array('title'=>'09234032', 'id'=>3));

$notMatch = array();
foreach ($data as $value) {
   if(!preg_match('/([a-zA-Z]).*/',$value['title'])){
       $notMatch[]=$value['title'];
       echo 'notmatch! ' . $value['title'];
   }
}

ただし、正規表現の経験が豊富な人が、より良いパターンを取得できる可能性は十分にあります。:)

http://codepad.viper-7.com/dvUQoW

于 2012-09-02T07:14:22.363 に答える