2014-09-02 39 views
0

我見過幾個類似於這個問題的例子 - 但沒有一個完全遵循我想要完成的。PHP - 在For循環中獲取數組鍵?按字母順序排列一個數組?

我的網站是多語言的 - 很自然地,當涉及到列表和字母順序等事情時,我們會遇到問題。

下面是我得到了什麼:

$items = array('Livro','Roupa','Brinquedos'); 
$id = array(1,2,3); 

// Livro (Book) = 1, Roupa (Clothes) = 2, Brinquedos (Toys) = 3 

在英語中,$items已經是按字母順序排列。在葡萄牙語中,顯然它不完全相同。因此,我需要的是$items重新排序的字母順序,然後讓$id排序也以相同的順序,以便它一樣:

$items = array('Brinquedos','Livro','Roupa'); 
$id = array(3,1,2); 

...我也有點做到了這一點:

$new_array = array_combine ($id,$items); 
sort($new_array); 

...但我似乎無法得到從for圈像上面所需要的數組鍵。有幾個函數存在,如key(),但試圖在for循環中獲得該工作時不產生輸出,或者依賴於循環循環。

我的主要問題:你是否可以循環使用for循環中的數組鍵,而沒有太多的複雜性,如果沒有,應該採用什麼替代方法來排序這兩個數組?由於高流量和支持這些語言所需的一切,我們的內存預算很緊張。

+4

而不是兩個陣列,使用鍵從$項目作爲編號 – 2014-09-02 00:04:33

+0

'不foreach($ new_array as $ key => $ value)'給你你想要的密鑰? – Barmar 2014-09-02 00:13:48

回答

0

由於從@Dagon建議,使用ID作爲關鍵:

$items = [0 => 'Livro', 
      1 => 'Roupa', 
      2 => 'Brinquedos']; 
asort($items); 

var_dump($items); //array(3) { [2]=> string(10) "Brinquedos" [0]=> string(5) "Livro" [1]=> string(5) "Roupa" } 

foreach($items as $key => $value) { 
    //$id is $key 
} 

也許你想使用OOP的:

class Item { 

    public $id; 
    public $name; 

    public function __construct($id, $name) { 
     $this->id = $id; 
     $this->name = $name; 
    } 
} 

$items = []; 
$items[] = new Item(0, 'Livro'); 
$items[] = new Item(1, 'Roupa'); 
$items[] = new Item(2, 'Brinquedos'); 

usort($items, function($a, $b) { 
    return strcmp($a->name, $b->name); 
}); 

var_dump($items); 

foreach ($items as $item) { 
    $id = $item->id; 
    $name = $item->name; 
    //Do stuff 
}