2014-08-27 4 views
0

У меня есть массив, который выглядит следующим образом:Сортировка массива на основе числа в значении

Array 
(
    [0] => [email protected] 20140827 
    [1] => [email protected] 20130827 
    [2] => [email protected] 20140825 
    [3] => [email protected] 20120825 
    [4] => [email protected] 20140826 
) 

Теперь я хочу, чтобы отсортировать этот массив в PHP на основе чисел только так игнорирующих электронной почты ADRES в этом роде обработать.

+2

Принимала ли вы посмотрите на [список] функции сортировки (http://php.net/manual/en/array.sorting.php) в руководство, чтобы узнать, может ли кто-нибудь из них помочь вам? – Jon

+0

ksort может вам помочь: http://php.net/manual/en/function.ksort.php – Logar

+1

@Logar: 'ksort' здесь не может. – Jon

ответ

1
<?php 
$data = Array(0 => '[email protected] 20140827', 
    1 => '[email protected] 20130827', 
    2 => '[email protected] 20140825', 
    3 => '[email protected] 20120825', 
    4 => '[email protected] 20140826' 
); 

$count_data = count($data); 

for($i=0;$i<$count_data;$i++) 
{ 
    $new_data[trim(strstr($data[$i], ' '))]=$data[$i]; 
} 
echo "<pre>"; print_r($new_data); 
?> 

это вернет вам

Array 
(
    [20140827] => [email protected] 20140827 
    [20130827] => [email protected] 20130827 
    [20140825] => [email protected] 20140825 
    [20120825] => [email protected] 20120825 
    [20140826] => [email protected] 20140826 
) 

Теперь вы можете сортировать в соответствии с потребностями по Key

0

Вы можете перебрать массив, explode строки в пространстве, ' ', а затем установить первую часть $explodedString[1] как ключ в новом массиве, а затем использовать ksort на новом массиве.

Неиспользованный код.

$oldArr; 
$newArr = array(); 

foreach($oldArr as $oldStr){ 
    $tmpStr = explode(' ', $oldStr); 
    $newArr[$tmpStr[1]] = $tmp[0]; //You could use $oldStr if you still needed the numbers. 
} 

ksort($newArr); 
4

Например, предполагающие записи всегда как email space number:

usort($ary, function($a, $b) { 
    $a = intval(explode(' ', $a)[1]); 
    $b = intval(explode(' ', $b)[1]); 
    return $a - $b; 
}); 

или более сложным, но эффективным способом с использованием Schwartzian transform:

$ary = array_map(function($x) { 
    return [intval(explode(' ', $x)[1]), $x]; 
}, $ary); 

sort($ary); 

$ary = array_map(function($x) { 
    return $x[1]; 
}, $ary); 
Смежные вопросы