输出这样的数组

时间:2017-07-25 11:13:42

标签: php html arrays algorithm

我正在制作一个程序,它将按升序输出一个数组但是如果找到了匹配的数字,它会跳过它并稍后再考虑。 例如: 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;
&#13;
&#13;

它不起作用。请更正代码。

谢谢

2 个答案:

答案 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);

它适用于无限制重复

You can try it here