0

アンダースコア付きの動的文字列を持つ val の配列があります。さらに、整数を含む変数 $key があります。$key を各 $val (アンダースコアの前の値) と一致させる必要があります。

私は次の方法で行いました:

<?php
    $key = 2; //always a dynamic number
$val = array('3_33', '2_55'); //always a dynamic string with underscore
if(in_array($key, $val)) {
    echo 'Yes'; 
} 
else
{
    echo 'No';  
}
?>

このコードは問題なく動作しますが、それが正しい方法であるかどうか、またはより良い代替案を提案するかどうかを知りたいです。

4

5 に答える 5

1

これはうまくいくはずです:

foreach( $val as $v ) 
{
    if( strpos( $v , $key .'_' ) === true ) 
    {
        echo 'yes';
    }
    else {
        echo 'no';
    }
}
于 2013-01-07T07:44:37.793 に答える
1

php.net からの正規表現一致にこの関数を使用します

function in_array_match($regex, $array) {
    if (!is_array($array))
        trigger_error('Argument 2 must be array');
    foreach ($array as $v) {
        $match = preg_match($regex, $v);
        if ($match === 1) {
            return true;
        }
    }
   return false;
}

次に、この関数を次のように使用するようにコードを変更します。

$key = 2; //always a dynamic number
$val = array('3_33', '2_55'); //always a dynamic string with underscore
if(in_array_match($key."_*", $val)) {
    echo 'Yes'; 
} 
else
{
    echo 'No';  
}
于 2013-01-07T08:19:18.200 に答える
0

与えられたフォーマットは非常に非現実的です。

$array2 = array_reduce ($array, function (array $result, $item) {
     list($key, $value) = explode('_', $item);
     $result[$key] = $value;
     return $result;
}, array());

これで、を使用するだけでキーが存在できるようになりますisset($array2[$myKey]);。この形式は、実行の後半でも役立つと思います。

于 2013-01-07T08:13:37.940 に答える
0

あなたはこれを使うことができます

    function arraySearch($find_me,$array){
$array2 =array();
foreach ($array as $value) {
    $val = explode('_',$value);
    $array2[] =$val[0]; 
}
$Key = array_search($find_me, $array2);
$Zero = in_array($find_me, $array2);
if($Key == NULL && !$Zero){
    return false;
}
return $Key;
}
于 2013-01-07T07:41:26.307 に答える
0
$key = 2; //always a dynamic number
$val = array('3_33', '2_55'); //always a dynamic string with underscore
$inarray = false;
foreach($val as $v){
    $arr = explode("_", $val);
    $inarray = $inarray || $arr[0] == $key
}
echo $inarray?"Yes":"No";
于 2013-01-07T07:39:39.080 に答える