下面有一个数组
$array = array(50,51,52,53,54,55,56,57,58,59);
我试图打印数组的值,而偶数将保持相同的顺序,奇数排序即59,57,55,53,51
输出应该像
50,59,52,57,54,55,56,53,58,51
我在两个不同的变量中分隔了偶数和奇数。我该怎么做呢?
这是我的代码
$even= "";
$odd= "";
for($i=50;$i<=59;$i++)
{
if($i%2==0)
{
$even.=$i.",";
}else $odd.=$i.",";
}
echo $even.$odd;
不是将偶数和奇数压入字符串,而是将它们分别压入一个数组,对数组进行反向排序,然后循环其中一个(最好是通过偶数数组),并将偶数和奇数添加到一个新数组中。
我是这样做的:
$array = array(50,51,52,53,54,55,56,57,58,59);
$odds = array();
$even = array();
foreach($array as $val) {
if($val % 2 == 0) {
$even[] = $val;
} else {
$odds[] = $val;
}
}
sort($even);
rsort($odds);
$array = array();
foreach($even as $key => $val) {
$array[] = $val;
if(isset($odds[$key])) {
$array[] = $odds[$key];
}
}
https://3v4l.org/2hW6T 但是,如果您的偶数少于奇数,则应该小心,因为循环将在所有奇数相加之前结束。你可以在填充新数组之前或之后检查。如果您在填充新数组后进行检查,则可以使用array_diff
和array_merge
将缺失的赔率添加到新数组中。
以下代码将按照奇数计数运行。不会有任何循环计数问题。
function oddNumber($num){
return $num % 2 == 1;
}
$givenArray = array(50, 51, 52, 53, 54, 55, 56, 57, 58, 59);
$oddArray = array_filter($givenArray, "oddNumber");
rsort($oddArray);
$finalArray = array();
$oddCount = 0;
foreach($givenArray as $num){
if(oddNumber($num)){
$finalArray[] = $oddArray[$oddCount];
++$oddCount;
}else{
$finalArray[] = $num;
}
}
print_r($finalArray);