在与现有值比较之前删除字符串的一部分
Remove portion of the string before compare with existent values
我有一个具有以下结构的数组:
$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
数组中查找它们。
所以问题是如何从字符串中删除该部分?
第二个 _
之后的值是动态生成的,因此它们的长度不是固定的。之前的值是常量。
如果您有更好的验证方法,请告诉我
一种方法(可能不是最有效的方法)是这样做的:
$s = "traveler_name_24872";
$arr = explode("_", $s);
array_pop($arr);
$s2 = implode("_", $arr); // traveler_name
根据您希望如何处理数据,这 return 正是您要查找的内容。然后,您可以将 $index 和 $value 放入一个新数组中,或者只在该 foreach 循环中操作数据。
这 return 是减去最后两个字符的完整字符串(通过 -2)。如果你想 return 除最后 3 个字符之外的所有字符,你可以将 -2 替换为 -3,等等
foreach ($arr as $key => $value) {
$index = substr($key, 0, -2);
}
经过一些尝试,我找到了解决方案,这就是我要找的:
foreach ($arr as $key => $value) {
if (!in_array(substr(key($key), 0, strrpos(key($key), '_')), $allowed_values, true)) {
echo 'Not allowed';
break;
}
}
还是谢谢你
我有一个具有以下结构的数组:
$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
数组中查找它们。
所以问题是如何从字符串中删除该部分?
第二个 _
之后的值是动态生成的,因此它们的长度不是固定的。之前的值是常量。
如果您有更好的验证方法,请告诉我
一种方法(可能不是最有效的方法)是这样做的:
$s = "traveler_name_24872";
$arr = explode("_", $s);
array_pop($arr);
$s2 = implode("_", $arr); // traveler_name
根据您希望如何处理数据,这 return 正是您要查找的内容。然后,您可以将 $index 和 $value 放入一个新数组中,或者只在该 foreach 循环中操作数据。
这 return 是减去最后两个字符的完整字符串(通过 -2)。如果你想 return 除最后 3 个字符之外的所有字符,你可以将 -2 替换为 -3,等等
foreach ($arr as $key => $value) {
$index = substr($key, 0, -2);
}
经过一些尝试,我找到了解决方案,这就是我要找的:
foreach ($arr as $key => $value) {
if (!in_array(substr(key($key), 0, strrpos(key($key), '_')), $allowed_values, true)) {
echo 'Not allowed';
break;
}
}
还是谢谢你