2013-05-31 44 views
0

我有以下兩個假設數組:PHP:將索引陣列基於其他陣列

$values = array("fourth", "first", "second", "third"); 
$indices = array(3, 0, 1, 2); 

什麼是重新排列基於$indices$values最快的方法是什麼?

是否有某種方式可以做$values->index_array = $indices

+0

@Danack:當OP不能表達自己的想法 - 這是正常) – zerkms

+1

@zerkms你的答案是正確和快速的。礦是正確的,但速度較慢。把它放回去,我會upvote :) – Danack

+0

這將有助於,如果你顯示了所需的結果是什麼。 – Barmar

回答

0

我會怎麼做:

<?php 
$newarray = array_fill_keys($indices, $values); 
?> 

這裏假設你的指數始終是唯一的,當然。

+0

謝謝,這似乎正是我所需要的 – TheWaterIsCold

+0

我不認爲這就是你想要的。它將'$ newarray'的每個元素設置爲相同的值。 – Barmar

+0

然而,他確實做了他所問的。它是完美的嗎?只有OP知道。 –

1

這只是基於從問題的短語猜測:

的方式來重新安排$值基於$指數

$values = array("fourth", "first", "second", "third"); $indices = array(3, 0, 1, 2); 

array_multisort($indices, $values); 

var_dump($values); 

在線演示:http://ideone.com/UKfNiq

輸出是:

array(4) { 
    [0]=> 
    string(5) "first" 
    [1]=> 
    string(6) "second" 
    [2]=> 
    string(5) "third" 
    [3]=> 
    string(6) "fourth" 
} 
+0

這不行。如果任何'$ indicies'與PHP分配數組鍵的方式不一致,則鍵值將丟失。 –

+0

@Phillip:OP的責任是保證他們的秩序。請參閱:「根據$索引重新排列$值」 – zerkms

+0

@zerms:足夠公平。無論如何,這個問題很糟糕。時間繼續前進。 –

-1

ZerkMS的回答正如問題所定義的那樣正確,但您最好採用另一種方法來生成結果。

如果可以的話,而不是生成的兩個數組:

$values = array("fourth", "first", "second", "third"); 
$indices = array(3, 0, 1, 2); 

,而不只是產生一個陣列,並呼籲ksort它:

$valuesToSort = array(); 
$valuesToSort[3] = 'fourth'; 
$valuesToSort[0] = 'first'; 
$valuesToSort[1] = 'second'; 
$valuesToSort[2] = 'third'; 

ksort($valuesToSort);