我正在制作一个程序,它将按升序输出一个数组但是如果找到了匹配的数字,它会跳过它并稍后再考虑。 例如: array = 2,1,3,1,5,2; 输出应该是: array = 1,2,3,5,1,2 //前四个序列号(1,2,3,5),然后重复序列后来排序。
这是我的代码
<?php
if(isset($_POST['submit'])) {
$var = $_POST['in'];
$arr = explode(" ",$var);
sort($arr);
$size = sizeof($arr);
$arr2 = array();
$cnt=0;
$k=0;
for($i=0;$i<$size;$i++)
{
for($j=0;$j<$size;$j++) {
$k = $j + 1;
if($arr[$j] < $arr[$k]) {
$arr2[$j] = $arr[$j];
array_splice($arr,$j,1);
}
if($arr[$j] == $arr[$k]) {
continue;
$cnt++;
}
if($cnt==0) {
break;
}
}
}
foreach($arr2 as $value) {
echo " ".$value;
}
}
?>
<html>
<head></head>
<body>
<form method="post">
<h2>Enter data</h2>
<input type="text" name="in" placeholder="Enter data with spaces.."/>
<input type="submit" value="ok" name="submit"/>
</form>
</body>
</html>
&#13;
它不起作用。请更正代码。
谢谢
答案 0 :(得分:2)
请试试这个:
$myArr = [] //with values 2, 1, 3, 1, 5, 2;
$tmp = $tmp2 = [];
foreach($myArr as $val){
if(!in_array($val, $tmp)){
$tmp[] = $val;
}else{
$tmp2[] = $val;
}
}
$finalArr = array_merge($tmp, $tmp2); // your desired output
答案 1 :(得分:0)
试试这个:
$arr = array( 2, 1, 3, 1, 5, 2,2);
$groups = array(array());
foreach($arr as $a) {
$found = false;
foreach($groups as &$g) {
if(in_array($a, $g)) {
continue;
}
$g[] = $a;
$found = true;
break;
}
if(!$found) {
$groups[] = array($a);
}
}
foreach($groups as &$g) {
sort($g);
}
$result = array();
foreach($groups as &$g) {
$result = array_merge($result, $g);
}
var_dump($result);
它适用于无限制重复