php脚本,以匹配数组中字符串的给定部分


php script to match given part of string in an array

我有一个类似"123456-1234-001-N"和数组$ids = array("123456-1234-002-N","123456-1234-001-S","4567789-4567-004-S","457896-14578-007-W") 的字符串

我想比较数组中的字符串,找出字符串的其余部分不匹配。例如:

  • 情况1:数组中存在123456、1234和N,但在第一种情况下001不匹配,因此抛出错误消息

  • 事例2:数组中存在123456、1234和001,第二个事例N不匹配,因此抛出错误消息。

    感谢您的帮助!

更新1:脚本应该匹配数组中的整个字符串,并显示错误消息,说明第三个或第四个垃圾不匹配。例如:我们可以使用字符串的123456和1234,看看001是否匹配或N是否匹配。基本上我需要知道字符串的第三/第四部分是否匹配。

更新2:我从已接受的答案中选择了第二种方法!

好的,到您的最新编辑:

$search = "123456-1234-001-N";
$ids = array("123456-1234-002-N","123456-1234-001-S","4567789-4567-004-S","457896-14578-007-W");
$search_parts = explode('-', $search);
foreach ( $ids as $id ) {
    echo "Checking {$id}..." . PHP_EOL;
    $id_parts = explode('-', $id);
    $i = 0;
    $is_correct = true;
    foreach ( $search_parts as $part ) {
        $part_no = $i + 1;
        if ( $part != $id_parts[$i] ) {
            $is_correct = false;
            echo "  part number {$part_no} is incorrect (is: {$id_parts[$i]}, should be: {$part});" . PHP_EOL;
        }
        $i++;
    }
    if ( $is_correct ) {
        echo "  This is a correct id!" . PHP_EOL;
    }
    echo PHP_EOL;
}

preg_match:也做了同样的事情(几乎)

$search = "123456-1234-001-N";
$search_pattern = '/^([0-9]*)''-([0-9]*)''-([0-9]*)''-([A-Z]*)$/';
$ids = array("123456-1234-002-N","123456-1234-001-S","4567789-4567-004-S","457896-14578-007-W");
$search_parts = explode('-', $search);
foreach ( $ids as $id ) {
    $res = preg_match($search_pattern, $id, $matches);
    if ( ! $res ) {
        throw new Exception("The id {$id} is in invalid format");
    }
    $diff = array_diff($search_parts, $matches);
    printDiffMessage($diff);
    echo PHP_EOL . "----" . PHP_EOL;
}
function printDiffMessage(array $diff)
{
    foreach ( $diff as $key => $value ) {
        $pos = $key + 1;
        echo "Keys differ at position {$pos}. ";
    }
}

以前(保留以供参考):

试试这个代码:

$ids = array("123456-1234-002-N","123456-1234-001-S","4567789-4567-004-S","457896-14578-007-W");
$search = '123456-1234-001-N';
foreach ( $ids as $single_id ) {
    $match = '';
    $i = 0;
    foreach ( str_split($search) as $chr ) {
        if ( $single_id[$i] != $chr ) {
            break;
        }
        $match .= $chr;
        $i++;
    }
    var_dump($match);
}

这就是你想要做的吗?

编辑:似乎in_array正是您所需要的。

if ( in_array($search, $ids) ) {
    echo "Found it";
}
else {
    echo "Error message";
}