Как отсортировать массив таким образом в php - PullRequest
0 голосов
/ 22 октября 2009

как функция usort в php но если два члена сравниваются как равные, их ключ должен быть одинаковым. например: $ arrayToSort = array (2,6,1,3,3);

после сортировки возврата

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

Ответы [ 5 ]

2 голосов
/ 22 октября 2009

В ответ на ответ медика вы используете медленные функции, такие как in_array() и array_push(), вместо быстрых конструкций, таких как isset() или оператор []. Ваш код должен выглядеть так:

$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);

Обратите внимание, что то, что вы делаете, в некотором роде похоже на PHP array_count_values()

1 голос
/ 22 октября 2009

У вас не может быть двух одинаковых клавиш. Ключи уникальны.

Если вы попытаетесь создать его в коде, вот что произойдет.

$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
1 голос
/ 22 октября 2009

Ваш пример не имеет смысла. Вы не можете иметь два одинаковых ключа в одном массиве. Если вы хотите отсортировать значения массива и сохранить их ключи, используйте asort(). Или любая из функций в таблице на http://ca.php.net/manual/en/array.sorting.php, которые говорят «да» в разделе «Поддерживает связь клавиш».

1 голос
/ 22 октября 2009

В массиве не может быть двух элементов с одинаковым ключом. Однако вы можете сгруппировать две тройки в один массив, чтобы 1 => 1, 2 => 2 и 3 => array (3,3).

0 голосов
/ 22 октября 2009

Не уверен, что есть встроенная функция, но это может быть тем, что вы хотите.

<code><?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 ) ), '
';

Выход:

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)
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...