3 回答
TA贡献1786条经验 获得超11个赞
您可以执行 array_unique (保留键),然后用0
. 按键排序就完成了:)
+
在数组上将是unify
数组,但优先考虑左侧的数组。
代码
$input = "0-1-1-3-1-1-3-5-0";
$array = explode('-', $input);
$result = array_unique($array) + array_fill(0, count($array), 0);
ksort($result);
var_dump(implode('-',$result));
代码(v2 - 由 micmackusa 建议) - 更短且更易于理解
填充输入数组大小的数组。并替换为 中的剩余值array_unique。不需要ksort。0s 将被替换为 的保留键array_unique。
$input = "0-1-1-3-1-1-3-5-0";
$array = explode('-', $input);
$result = array_replace(array_fill(0, count($array), 0), array_unique($array));
var_export($result);
工作示例。
输出
string(17) "0-1-0-3-0-0-0-5-0"
工作示例。
参考
ksort - 按键排序
array_fill - 生成一个填充
0
一定长度的数组
TA贡献1818条经验 获得超11个赞
这是另一种方法。
$id = "202883-202882-202882-0-234567-2-2-45435";
从字符串中,您根据分隔符将字符串分解为数组,在本例中为“-”/
$id_array = explode('-', $id);
然后我们可以循环遍历该数组,对于找到的每个唯一条目,我们可以将其存储在另一个数组中。因此,当我们搜索数组时,我们正在构建一个数组。
$id_array_temp = [];
// Loop through the array
foreach ($id_array as $value) {
if ( in_array($value, $id_array_temp)) {
// If the entry exists, replace it with a 0
$id_array_temp[] = 0;
} else {
// If the entry does not exist, save the value so we can inspect it on the next loop.
$id_array_temp[] = $value;
}
}
在此操作结束时,我们将得到一个唯一值数组,其中任何重复项都将替换为 0。
要重新创建字符串,我们可以使用 implode...
$str = implode('-', $id_array_temp);
echo $str;
重构这个,使用三元来代替 If,else...
$id_array = explode('-', $id);
$id_array_temp = [];
foreach ($id_array as $value) {
$id_array_temp[] = in_array($value, $id_array_temp) ? 0 : $value;
}
$str = implode('-', $id_array_temp);
echo $str;
输出是
202883-202882-0-0-234567-2-0-45435
TA贡献1776条经验 获得超12个赞
这似乎是一个经典的XY 问题。
基本行动只需:
用连字符分隔字符串中的子字符串。
验证每个子字符串中的字符格式正确并且对于该集合是唯一的。
仅对合格值采取有意义的行动。
您会看到,当您只真正需要验证输入数据时,替换/清理任何内容都没有任何好处。在输入中添加零只会在以后产生更多工作。
简而言之,您应该使用类似于此流程的直接方法:
if (!empty($_GET['id'])) {
$ids = array_unique(explode('-', $_GET['id']));
foreach ($ids as $id) {
if (ctype_digit($id) && strlen($id) === 6) {
// or: if (preg_match('~^\d{6}$~', $id)) {
takeYourNecessaryAction($id);
}
}
}
- 3 回答
- 0 关注
- 108 浏览
添加回答
举报