我有一个带有以下结构的数组:
$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
数组上查找它们。
所以问题是如何从字符串中删除该部分?
第二个_
之后的值是动态生成的,因此它们的长度不是恒定的。之前的值是不变的。
如果您有更好的方法来验证这一点,请继续告诉我
答案 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;
}
}
无论如何,谢谢你