我有一个类似"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";
}