2016-06-07 41 views
0

我有一個三角形的列表,每個Traingle有一個ID,周長和麪積。PHP:一個簡單的數據結構的字典有3個值/鍵

我需要實現函數來根據其中一個參數(id或周長或面積)在列表中找到三角形。

問題是如何在這種情況下存儲列表?我正在尋找一些簡單的東西,這將使這些功能變得很小。

我試圖用

$triangleList[$id] = [$area,$perimeter]; 

每個三角形建立協會。陣列。但現在一個不容易找到基於面積或周長的三角形(必須使用foreach,in_array是不夠的)。

有沒有簡單的方法來做到這一點?

+0

這是很難理解的,當你說「必須使用的foreach,in_array是不夠的」,所以你的意思是你不希望使用的foreach和in_array英語嗎? – digout

+0

我不這麼認爲。面積和周長不會是唯一的,這就是爲什麼你不能將它們用作鑰匙。 – eol

+0

是的,我不想使用foreach。尋找現有的功能,如in_array –

回答

1

說您正在尋找面積= 2例如三角形,

$subset = array_reduce($triangleList, function ($carry, $item) { 
    if ($item['area'] == 2) { 
     $carry[] = $item; 
    } 
}, array()); 
+0

Intresting ...但搜索功能的複雜性與使用foreach的簡單解決方案保持一致。你有使用其他數據結構的建議嗎? –

1

我的解決辦法,在一個類中使用三個簡單的陣列。然後使用array_search搜索功能:

class ListOfTriangles { 

private $ids = []; 
private $areas = []; 
private $perimeters = []; 

public function addTriangle($id,$area,$perimeter){ 
    $ids[] = $id; 
    $areas[] = $area; 
    $perimeters[] = $perimeter; 
} 

public function getTriangle($index){ 
    return [$this->ids[$index],$this->areas[$index],$this->perimeters[$index]]; 
} 

public function searchById($id){ 
    $index = array_search($id, $this->ids); 
    return $this->getTriangle($index); 
} 

public function searchByArea($area){ 
    $index = array_search($area, $this->areas); 
    return $this->getTriangle($index); 
} 

public function searchByPerimiter($perimiter){ 
    $index = array_search($perimiter, $this->perimiters); 
    return $this->getTriangle($index); 
} 
} 
相關問題