输出数组的偶数和(排序的)奇数


print even and (sorted) odd numbers of an array

下面有一个数组

$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_diffarray_merge将缺失的赔率添加到新数组中。

http://php.net/array_diff http://php.net/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);