删除部分字符串,然后与现有值

时间:2016-08-09 17:53:03

标签: php algorithm comparison string-comparison

我有一个带有以下结构的数组:

$arr = [
     traveler_name_1 => 'value',
     hotel_name_1    => 'value',
     hotel_in_date_1 => 'value',

     traveler_name_2 => 'value',
     hotel_name_2    => 'value',
     hotel_in_date_2 => 'value',

     traveler_name_n => 'value',
     hotel_name_n    => 'value',
     hotel_in_date_n => 'value',
];

我想检查没有索引的字符串是否有效且是否允许。例如:

$allowed_values = [
    'traveler_name',
    'hotel_name',
    'hotel_in_date'
];

简单的方法是将$arr作为$key => $value对进行迭代,然后创建in_array()但是为此,我需要首先删除字符串的最后一部分,例如:

traveler_name_1 => remove the _1
hotel_name_1    => remove the _1
hotel_in_date_1 => remove the _1

所以我可以在$allowed_values数组上查找它们。

所以问题是如何从字符串中删除该部分?

第二个_之后的值是动态生成的,因此它们的长度不是恒定的。之前的值是不变的。

如果您有更好的方法来验证这一点,请继续告诉我

3 个答案:

答案 0 :(得分:0)

单向(可能不是最有效的方法)是这样做:

$s = "traveler_name_24872";
$arr = explode("_", $s);
array_pop($arr);
$s2 = implode("_", $arr); // traveler_name

答案 1 :(得分:0)

取决于您希望如何操纵数据,这将返回您正在寻找的内容。然后,您可以将$ index和$值放在一个新数组中,或者只是操作该foreach循环中的数据。

这将返回完整的字符串减去最后两个字符(通过-2)。如果你想要返回除最后3个字符以外的所有字符,你可以用-3等替换-2,等等。

foreach ($arr as $key => $value) {
   $index = substr($key, 0, -2);
}

答案 2 :(得分:-1)

经过一些尝试后我找到了解决方案,所以这就是我要找的东西:

foreach ($arr as $key => $value) {
    if (!in_array(substr(key($key), 0, strrpos(key($key), '_')), $allowed_values, true)) { 
        echo 'Not allowed'; 
        break;
    }
}

无论如何,谢谢你