2015-08-20 23 views
6

odasında sırtından ön ve pozitif tamsayılar negatif tamsayılar ben negatif tamsayılar olduklarını şekilde sıralamak neeed budüzen bir tamsayı dizisi, PHP

$input = array(-1,1,3,-2,2, 3,4,-4); 

gibi bir dizi verildi ön ve pozitif tamsayılar arkadadır ve göreli konum değiştirilmemelidir. Bu nedenle çıktı

Bu değeri kullanarak denedim, ancak göreli konumları koruyamadım.

function cmp ($a, $b) 
{ 
    return $a - $b; 
} 
usort($input, "cmp"); 
echo '<pre>', print_r($input), '</pre>'; 

Array 
(
    [0] => -4 
    [1] => -2 
    [2] => -1 
    [3] => 1 
    [4] => 2 
    [5] => 3 
    [6] => 3 
    [7] => 4 
) 

Herhangi bir düşünce?

+0

Burada çıktıda -4? – amit

cevap

5

bu deneyin ..

$arr = array(-1,1,3,-2,2, 3,4,-4); 


$positive = array_filter($arr, function($x) { return $x > 0; }); 
$negative = array_filter($arr, function($x) { return $x < 0; }); 

sort($positive); 
rsort($negative); 

$sorted = array_merge($negative,$positive); 
print_r($sorted); 

Demo: https://eval.in/419320

Çıktı:

Array 
(
    [0] => -1 
    [1] => -2 
    [2] => -4 
    [3] => 1 
    [4] => 2 
    [5] => 3 
    [6] => 3 
    [7] => 4 
) 
+1

Bu, OP'nin değerleri sıralamak istememesi dışında neredeyse doğrudur. Sıralamayı bırakın ve "$ pozitif" ve "$ negatif" dizileri birleştirin ve altınsınız. Bunun gibi: https://eval.in/419328 –

+0

Fikrin için teşekkürler, yaklaşımınızı array_map kullanarak denedim, ancak benim için boş diziler döndürüyor. https://eval.in/419331 –

+0

@Stuart Wagner düşüncelerinizi kabul ediyorum ama diğer değerler için negatif değerler yeniden düzenlenebilir –

3

Bu sorunu sipariş edilirken bir , ama bir sıralama değil.

şöyle bir sorun ayrılabilir

:

  1. ayrı iki dizi halinde verilmiştir dizisi; Negatif sayılardan biri, diğeri pozitif sayılar. (0'u istediğiniz yerde düşünmelisiniz.) Bu dizilerin her birindeki öğelerin sırası, giriş dizisinde göründüğü gibi olmalıdır.

    Bunu, push ing değerleriyle yapın. İki diziyi birleştirin.