隔行扫描数组,将奇数键附加到数组末尾

时间:2011-09-10 04:53:06

标签: php arrays

我有和数组这里是一个例子

0 apples 
1 oranges
2 peaches
3 pears
4 watermelon

我期待的是这样的事情

0 apples
2 peaches
4 watermelon
1 oranges
3 pears

数组键是否改变无关紧要,我只需要值的位置。

3 个答案:

答案 0 :(得分:2)

<?php
$fruit = array('apples', 'oranges', 'peaches', 'pears', 'watermelon');

function fruitCmp($a, $b) {
    if ($a == $b) {
        return 0;
    }

    $aIsOdd = $a % 2;
    $bIsOdd = $b % 2;

    if (($aIsOdd && $bIsOdd) || (!$aIsOdd && !$bIsOdd)) {
        return $a < $b ? -1 : 1;
    }

    if ($aIsOdd && !$bIsOdd) {
        return 1;
    }

    if (!$aIsOdd && $bIsOdd) {
        return -1;
    }
}

uksort($fruit, 'fruitCmp');

var_dump($fruit);

输出:

array(5) {
  [0]=>
  string(6) "apples"
  [2]=>
  string(7) "peaches"
  [4]=>
  string(10) "watermelon"
  [1]=>
  string(7) "oranges"
  [3]=>
  string(5) "pears"
}

答案 1 :(得分:1)

嗯,试试这样的事情:

<?php
$fruits = array('apples', 'oranges', 'peaches', 'pears', 'watermelon');
$odds = array();
$evens = array();

for($i = 0; $i < count($fruits); $i++){
    if($i % 2){
        $odds[] = $fruits[$i];
    } else {
        $evens[] = $fruits[$i];
    }
}
?>

你最终会得到两个数组,你可以按照自己的意愿处理赔率,然后合并数组(将赔率附加到均衡:$ combined = $ evens + $ odds;)。

答案 2 :(得分:0)

许多选项,例如:

foreach($a as $n => $v)
    $out[(($n & 1) << 24) | $n] = $v;
ksort($out);

foreach($a as $n => $v)
    $out[$n & 1][] = $v;
$out = array_merge($out[0], $out[1]);