Php bu şekilde bir diziyi sıralamak için nasıl

5 Cevap php

like the function usort in php but if two members compare as equal, their key should be same. for example: $arrayToSort = array(2,6,1,3,3);

sonra sıralama dönüş

array
  1 =>  1
  2 =>  2
  3 =>  3
  3 =>  3
  4 =>  6

5 Cevap

Orada bir yerli işlev ama bu might ne istediğinizi olmak emin değilim.

<?php
$arr = array(1,2,2,2,3);

function arrayKeyJoin( $arr ) {
    $newArr = array();
    foreach ( $arr as $item ) {
 if ( !in_array( $item, array_keys($newArr) ) ) {
     $newArr[$item] = array();
 }
 array_push( $newArr[$item], $item );
    }
    return $newArr;
}

echo '<pre>', var_dump( arrayKeyJoin( $arr ) ), '</pre>';

Çıktı:

array(3) {
  [1]=>
  array(1) {
    [0]=>
    int(1)
  }
  [2]=>
  array(3) {
    [0]=>
    int(2)
    [1]=>
    int(2)
    [2]=>
    int(2)
  }
  [3]=>
  array(1) {
    [0]=>
    int(3)
  }
}

Meder cevabı yanıt olarak, bu tür in_array() gibi yavaş fonksiyonları kullanarak konum ve array_push() yerine böyle isset() veya {[(3)] gibi hızlı yapıları } operatörü. Kodunuzu aşağıdaki gibi görünmelidir:

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

$new = array();
foreach ($arr as $v)
{
    $new[$v][] = $v;
}

// then you can sort the array if you wish
ksort($new);

Ne yaptığınızı bir şekilde, benzer olduğunu unutmayın, PHP'nin kendi array_count_values()

Siz bir dizide aynı anahtar ile iki unsuru olamaz. Ancak bunu, grup bir diziye iki üçler, böylece 1 => 1, 2 => 2 ve 3 => array (3,3).

Sen aynı olan iki tuşları olamaz. Tuşlar benzersizdir.

Eğer kodu oluşturmak için çalışırsanız, burada ne var.

$data[1] = 1;  // Assigns value 1 to key 1;   1 element in array
$data[2] = 2;  // Assigns value 2 to key 2;   2 elements in array
$data[3] = 3;  // Assigns value 3 to key 3;   3 elements in array
$data[3] = 3;  // Reassigns value 3 to key 3; STILL 3 elements in array
$data[4] = 6;  // Assigns value 6 to key 4;   4 elements in array

Sizin örnek mantıklı değil. Aynı dizideki iki eşit tuşları olamaz. Eğer dizinin değerlerini sıralamak ve onların tuşları korunmuş olması, "anahtar dernek korur" altında "evet" demek asort() . Or any of the functions in the table at http://ca.php.net/manual/en/array.sorting.php bu kullanmak istiyorsanız.