2015-05-25 64 views
-1

下與對象和整數多維數組我不得不計數未命中項的總數中,兩個對象用PHP,這是在下面的類定義之間:處理PHP

<?php 
class Module { 
    var $nD; 
    var $nC; 
    var $nA; 
    function __construct($nD, $nC, $nA) { 
     $this->nD = $nD; 
     $this->nC = $nC; 
     $this->nA = $nA; 
    } 
    function toString() { 
     return $this->nD . "-" . $this->nC . "-" . $this->nA . "<br>"; 
    } 
} 

?> 

有一些固定的模,這有以下幾種:

$mods = array (
     'mod1' => new module (4, 3, 3), 
     'mod2' => new module (5, 3, 2), 
     'mod3' => new module (4, 4, 2), 
     'mod4' => new module (5, 4, 1), 
     'mod5' => new module (4, 5, 1), 
     'mod6' => new module (3, 5, 2), 
     'mod7' => new module (3, 4, 3) 
); 

因此,例如,作爲輸入,我鍵入以下模塊(2,4,3),並且總的差異的結果,爲MOD1的情況下將是: 4-2 = 2,3-4 = -1→0(只是正值),3-3 = 0所以總數2 + 0 + 0 = 2mod2的將是: 5-2 = 3,3-4 = -1 - > 0(只是應該加上正值),2-3 = -1 - >(只是正值)所以總數3

這是代碼,計算出的差異值:

<?php 
include 'module.php'; 
function getmodules($id = null) { 
    $mods = array (
      'mod1' => new module (4, 3, 3), 
      'mod2' => new module (5, 3, 2), 
      'mod3' => new module (4, 4, 2), 
      'mod4' => new module (5, 4, 1), 
      'mod5' => new module (4, 5, 1), 
      'mod6' => new module (3, 5, 2), 
      'mod7' => new module (3, 4, 3) 
    ); 

    if (null !== $id) { 
     return isset ($mods [$id]) ? $mods [$id] : false; 
    } else { 
     return $mods; 
    } 
} 

$module = new Module (2, 3, 4); 
$array = array(); 
for($i = 1; $i <= 7; $i ++) { 
    $par = getmodules ('mod' . $i); 
    $num = 0; 
    if ($par->nD > $module->nD) { 
     $num += $par->nD - $module->nD; 
    } 
    if ($par->nC > $module->nC) { 
     $num += $par->nC - $module->nC; 
    } 
    if ($par->nA > $module->nA) { 
     $num += $par->nA - $module->nA; 
    } 

} 
?> 

所以我想要的東西,是有一個排序的HashMap的,以作爲鍵值例如模塊(新模塊(4, 4,2))和作爲$ num變量的值。 另外,作爲下一步,我想用$月的月牙值來訂購HashMap。 所以輸出將是這樣的:

$ output = array()[對象Module mod1 => $ num mod1,對象Module mod2,$ num of mod2];

我希望問題很清楚。如有疑問,請詢問。

+0

我,似乎明白一切的一切,直到 '作爲下一步' 並沒有什麼後:) – splash58

回答

1

寫成了解

class Module { 
    static $matrix = array(
     array (4, 3, 3), 
     array (5, 3, 2), 
     array (4, 4, 2), 
     array (5, 4, 1), 
     array (4, 5, 1), 
     array (3, 5, 2), 
     array (3, 4, 3) 
    ); 
    var $values = array(0,0,0); 
    function __construct($nD, $nC, $nA) { 
     $this->values = array($nD, $nC, $nA); 
    } 
    function toString() { 
     return implode(' - ', $this->values). "<br>"; 
    } 
    function hash() { 
     foreach (self::$matrix as $m) { 
     $nm = 0; 
     foreach ($this->values as $key => $val) { 
      $n = $m[$key] - $val; 
      $nm += $n > 0 ? $n : 0; 
      } 
     $num[] = $nm; 
     } 
     return $num; 
    } 
} 

$module = new Module (2, 3, 4); 

// here you can set matrix by Module::matrix 

var_dump($module->hash()); 

輸出:

array(7) { 
    [0]=> 
    int(2) 
    [1]=> 
    int(3) 
    [2]=> 
    int(3) 
    [3]=> 
    int(4) 
    [4]=> 
    int(4) 
    [5]=> 
    int(3) 
    [6]=> 
    int(2) 
} 
+0

謝謝您的答覆。我還沒有完全理解var_dump();方法。順便說一下,解決方案非常接近!如何獲取具有$ num最小值的Module對象?你能修改代碼嗎? –

+0

我可以獲取Module對象嗎?-ie。真正的mattrix線? – splash58

+0

它必須通過哈希方法返回? – splash58