2012-05-31 2 views
0

я получаю два массива изСортировка массива с весами в другом массиве

$check = getmxrr ($domain, $mxhosts, $weight); 

Я хочу, чтобы получить mxhosts в третьем массиве от самого низкого до самого высокого веса.

Для простоты давайте простые имена массивов и значение:

$s = array('slowest','fast','very slow', 'slow','very fast', 'fastest'); 
$n = array(40,  10, 30,   20, 5,   0  ); 

Теперь, с этим кодом, я могу получить упорядоченный массив Я ищу:

$o = array_combine($n, $s); 
ksort($o); 

Но, если являются элементами с одинаковым весом, только последний элемент с повторным весом появится в упорядоченном массиве.

Есть ли подобные проблемы (с низкой площадью основания) без этой проблемы?

Иллюстративные случаи.

Весовые значения уникальны. Выход OK:

[0] => fastest 
[5] => very fast 
[10] => fast 
[20] => slow 
[30] => very slow 
[40] => slowest 

У нас есть элементы тот же вес. Выход NOT OK (быстро уходит):

$n = array(40,  10, 30,   10,  20, 5,   0  ); 
$s = array('slowest','fast','very slow','fast2', 'slow','very fast', 'fastest'); 
[0] => fastest 
[5] => very fast 
[10] => fast2 
[20] => slow 
[30] => very slow 
[40] => slowest 
+0

доля код для метода array_combine – Rab

+0

это делает новый массив $ o с ключами из $ s и значением из $ n на порядок $ o [$ n [0]] = $ s [0] – gmaliar

+0

@CoDeaDDict - это родная функция: http://www.php.net/ ручной/EN/function.array-combine.php –

ответ

2

Так вы считаете, имена хостов уникальны, переключите ord эр комбайн

$n = array(40,  10, 30,   10,  20, 5,   0  ); 
$s = array('slowest','fast','very slow','fast2', 'slow','very fast', 'fastest'); 
$o = array_combine($s, $n); 

и использовать asort для сортировки значений при сохранении ключей

asort($o); 

чем ваши отсортированные имена хостов в array_keys

var_dump(array_keys($o)); 
array(7) { 
    [0]=> 
    string(7) "fastest" 
    [1]=> 
    string(9) "very fast" 
    [2]=> 
    string(5) "fast2" 
    [3]=> 
    string(4) "fast" 
    [4]=> 
    string(4) "slow" 
    [5]=> 
    string(9) "very slow" 
    [6]=> 
    string(7) "slowest" 
} 

var_dump($o); 
array(7) { 
    ["fastest"]=> 
    int(0) 
    ["very fast"]=> 
    int(5) 
    ["fast2"]=> 
    int(10) 
    ["fast"]=> 
    int(10) 
    ["slow"]=> 
    int(20) 
    ["very slow"]=> 
    int(30) 
    ["slowest"]=> 
    int(40) 
} 
+0

+1 + Accept;) Умный! Благодарю. –

1

Вы можете сделать это:

$s = array('slowest','fast', 'slow', 'fastest', 'slow 2'); 
$n = array(40, 10, 20, 0, 20); 

$res = array(); 
foreach ($n as $k => $v) { 
    $res[$v] .= count($res[$v]) ? ",{$s[$k]}" : $s[$k]; 
} 

ksort($res); 
$res = explode(',', implode(',', $res)); 

print_r($res); 
/* 
Array 
(
    [0] => fastest 
    [1] => fast 
    [2] => slow 
    [3] => slow 2 
    [4] => slowest 
) 
*/ 
+0

Значение wights не важно; только они должны быть в правильном порядке.Итак, все, что я хочу в приведенном выше случае, это '('fastest', 'fast', 'slow', 'slow 2', 'slowest')' –

+0

@MajidFouladpour См. Мой отредактированный код. – flowfree

+0

Благодарим вас за усилия. Этот код выполняет эту работу, но генерирует много уведомлений. –

0

Попробуйте

function cmp($a, $b) 
{ 
    if ($a > $b) 
     return 1; 
    elseif ($b > $a) 
     return -1; 
    else 
     return 0; 
} 

uksort($array, 'cmp'); 
+0

Не ждите, что это неправильно ... – gmaliar

+0

Является ли '$ array' в приведенном выше массиве' $ weight'? Если да, то какой эффект будет иметь массив '$ mxhosts'? - '$ mxhosts' - это то, что мне нужно отсортировать * в соответствии с значениями в' $ weight' *, хотя –

Смежные вопросы