php 使用通配符匹配变量名

php match variable names using wildcard

我需要检查变量是否存在。

变量不一定按照1.2.3的顺序创建。他们可以创建 2.4.3.1。这些也不是在同一页面上同时创建的。所以我只想检查变量是否存在。

$_SESSION['rule1']
$_SESSION['rule2']
$_SESSION['rule3']
$_SESSION['rule4']

<?
 if(isset($_SESSION['rule'.*wildcard*'])) {

 do something

 }
?>

我不知道该怎么做。答案可能在于 REGEX,但我对 REGEX 感到恐惧。

如果您不知道需要知道会话数组中的哪个规则*键,只有其中任何一个存在,那么您可以试试这个:

<?php

function prefixExists(array $assoc_array, $prefix)
{
    $length = strlen($prefix);
    foreach ($assoc_array as $key => $unused)
    {
        if (strncmp($key, $prefix, $length) === 0) {
            return true;
        }
    }
    return false;
}

测试如下:

session_start();
var_dump(prefixExists($_SESSION, 'rule'));
$_SESSION['rule3'] = 'some value from form';
var_dump(prefixExists($_SESSION, 'rule'));

给出输出:

bool(false)
bool(true)

这是另一个使用 preg_match 的解决方案:

function arrayHasSimilarKey(array $array, $matchKey)
{
    $pattern = '/' . str_replace('*', '.*', $matchKey) . '/i';
    foreach ($array as $key => $value) { echo $key.PHP_EOL;
        if (preg_match($pattern, $key)) {
            return true;
        }
    }

    return false;
}

$testArray = ['abc' => 1, 'test_1' => 1, 'test_2' => 1, 'test2_1' => 1, 'test3_2' => 1];
$tests = [
    0 => arrayHasSimilarKey($testArray, 'test*'),    // true
    1 => arrayHasSimilarKey($testArray, 'test2*_2'), // false
    2 => arrayHasSimilarKey($testArray, 'test3*'),   // true
    3 => arrayHasSimilarKey($testArray, 'test3*_1'), // false
    4 => arrayHasSimilarKey($testArray, '*_2')       // false
];

var_dump($tests);

在您的情况下,$testArray 将是 $_SESSION