Сортировка массива по значению числа символов - PullRequest
1 голос
/ 16 сентября 2011

Привет, думая, что у меня есть такой массив:

[0]=>[
   [0]=>'Hey',
   [1]=>'H',
   [2]=>'He',



]

Теперь я хотел бы отсортировать по числу символов и вернуть somenthing так:

[0]=>[
   [0]=>'H',
   [1]=>'He',
   [2]=>'Hey',
]

возможно, ответ будет array_sort() но я не могу этого сделать.также я не хотел бы зацикливать массив для проверки числа символов значений, но если это единственный способ, который мне нужно использовать в любом случае: P

BTW

как вернуть тот же самый упорядоченный массивпо ['name'] ключевому числу символов ASC (h - he -hey -heyh - heyhey)?

array(5) {
  [0]=>
  array(2) {
    ["id"]=>
    object(MongoId)#26 (1) {
      ["$id"]=>
      string(24) "4e72858ccaa47ca608030000"
    }
    ["name"]=>
    string(4) "h"
  }
  [1]=>
  array(2) {
    ["id"]=>
    object(MongoId)#29 (1) {
      ["$id"]=>
      string(24) "4e72858ccaa47ca608040000"
    }
    ["name"]=>
    string(10) "hey"
  }
  [2]=>
  array(2) {
    ["id"]=>
    object(MongoId)#31 (1) {
      ["$id"]=>
      string(24) "4e72858ccaa47ca608400000"
    }
    ["name"]=>
    string(1) "heyhey"
  }
  [3]=>
  array(2) {
    ["id"]=>
    object(MongoId)#33 (1) {
      ["$id"]=>
      string(24) "4e72858ccaa47ca6081a0000"
    }
    ["name"]=>
    string(6) "he"
  }
  [4]=>
  array(2) {
    ["id"]=>
    object(MongoId)#35 (1) {
      ["$id"]=>
      string(24) "4e72858ccaa47ca6083d0000"
    }
    ["name"]=>
    string(3) "heyh"
  }
}

Ответы [ 4 ]

2 голосов
/ 16 сентября 2011

они не являются функциями, подобными array_sort () в php, вам нужно использовать только функцию sort (), которая сортирует массив по значениям и сохраняет информацию о ключе такой, какая она есть.

$ arr = array ('0' => array ('0' => 'Hey', '1' => 'H', '2' => 'He'));

foreach($arr as $k=>$v):
$arr1 = $v;
sort($arr1);
print_r($arr1);
endforeach;

?>

2 голосов
/ 16 сентября 2011

PHP usort позволяет указать пользовательскую функцию сортировки:

<?php
    $arr = array(array('Hey', 'H', 'He'));
    print_r($arr);

    usort($arr[0], function($a, $b) {
        return strlen($a) - strlen($b);
    });

    print_r($arr);
?>

DEMO

2 голосов
/ 16 сентября 2011

Если вы хотите отсортировать по количеству символов, usort - это путь. Позволяет определить собственную функцию сортировки.

function lengthsort($s1, $s2) {
    if (strlen($s1['name']) < strlen($s2['name'])) {
        return -1;
    } elseif (strlen($s1['name']) > strlen($s2['name'])) {
        return 1;
    } else {
        return 0;
    }
}
usort($array, 'lengthsort');
1 голос
/ 16 сентября 2011

взгляните на usort () , которая позволяет вам определить собственную функцию для сортировки:

$myarray = array('Hey','H','He');

usort($myarray,function($a, $b){
  if (strlen($a) == strlen($b)) {
    return 0;
  }
  return (strlen($a) < strlen($b)) ? -1 : 1;
});

var_dump($myarray); // array('H','He','Hey')

обратите внимание, что я использую встроенную функцию здесь, что возможно с php 5.3+ - в более низких версиях php вам придется определить традиционную функцию и передать имя этой функции usort()

...