2011-09-10 11 views
0

の末尾に奇数のキーを追加しインターレース配列、私が持っていると、配列は、ここでの例であるアレー

0 apples 
1 oranges 
2 peaches 
3 pears 
4 watermelon 

それがあれば問題ありません。この

0 apples 
2 peaches 
4 watermelon 
1 oranges 
3 pears 

のようなものは、私は何を探していますです配列キーが変わるかどうか、私は値の場所が必要です。

+0

あなたが元の配列を変更する必要がある、またはそれをするのに十分ですか新しい配列を作成しますか? – Gabe

+0

私には関係ありません。 – ThomasReggi

答えて

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

うーん、このような何か試してください:あなたは二つの配列となってしまいます

<?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]; 
    } 
} 
?> 

をあなたが望むように、あなたはオッズで作業することができ、その後に追いついにオッズを追加(配列を結合:$組み合わせ= $ evens + $ odds;)。

+0

これは動作していて、私がそれをやる予定をかなり確認しています。ありがとう!オッズとエヴェンスの後の '[]'括弧がありません。これを行うための他の方法があるかどうか分かりませんか? hmm – ThomasReggi

+0

ありがとう、私は訂正をしました。 – AVProgrammer

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]); 
関連する問題