2011-10-29 24 views
5

मैं इस कोड के साथ समस्या की व्याख्या करने की कोशिश करूंगा।सरणी में स्वचालित योग

यह स्क्रिप्ट तीन व्यक्तियों ($ numRows = 3) तक अच्छी तरह से काम करती है।

$z=0; 
$i=0; 
$x=0; 

do { 
    $total[] = (
     ${'contaH'.$z}[$i+0]*$final[$x+0]+ 
     ${'contaH'.$z}[$i+1]*$final[$x+1]+ 
     ${'contaH'.$z}[$i+2]*$final[$x+2] 
    ); 
    $z++; 
} while ($z<$numRows); //3 

लेकिन अगर मैं केवल चार व्यक्तियों है ($ numrows = 4), मैं कुछ इस तरह की जरूरत है:

$z=0; 
$i=0; 
$x=0; 

do { 
    $total[] = (
     ${'contaH'.$z}[$i+0]*$final[$x+0]+ 
     ${'contaH'.$z}[$i+1]*$final[$x+1]+ 
     ${'contaH'.$z}[$i+2]*$final[$x+2]+ 
     ${'contaH'.$z}[$i+3]*$final[$x+3] 
     // if they are 5 persons ($numRows=5), here, should exists another row 
    ); 
    $z++; 
} while ($z<$numRows); //4 

तो समस्या $ के numrows संबंध में इन परिवर्तनों को स्वचालित करने के लिए है।

Enter image description here

केवल एक चीज है कि मैं व्यक्तियों की संख्या के एक समारोह में गतिशील रूप से मेरे कोड डाल दिया जाता है चाहता हूँ:

यहाँ मैट्रिक्स बीजगणित का एक डेमो है।

A | B | C | D 
Person1 
Person2 
Person3 
Person4 
... 

मेरे मामले में अलग-अलग व्यक्तियों की संख्या केवल अलग-अलग हो सकती है।

अधिक जानकारी here

+0

अपने प्रश्न पूरी तरह से स्पष्ट नहीं है

निम्नलिखित कोड है, तथापि, अपने समाधान स्वचालित करता है। कृपया अपना प्रश्न लिखें – diEcho

+0

अधिक सामान्य शब्दों में समस्या का वर्णन करें, यह पता लगाने की कोशिश कर रहे हैं कि आप अत्यधिक कोड के टुकड़े से क्या करना चाहते हैं, यह आसान नहीं है। आपकी डेटा संरचना क्या है? क्या आपके पास कई चर '$ contaH0', '$ contaH1' आदि हैं? आप इसके बजाय सरणी का उपयोग क्यों नहीं कर रहे हैं? – deceze

+0

उपरोक्त कोड के साथ कोई समस्या नहीं है। एकमात्र चीज जिसे मैं कार्यान्वित करना चाहता हूं वह योग पंक्तियों की एक चर संख्या है। यदि $ numRows की संख्या 3 है, तो प्रत्येक लूप के लिए तीन रकम होनी चाहिए, यदि 4 में, चार रकम होनी चाहिए, यदि 5 में, 5 रकम होनी चाहिए। क्या बदलना चाहिए $ numRows – Daniel

उत्तर

2
$z=0; 
$i=0; 
$x=0; 
$numRows = 5; 

do{ 
    $currentSum = 0; 
    for($c = 0; $c < $numRows; $c++){ 
     $currentSum += (${'contaH'.$z}[$i+$c] * $final[$x+$c]); 
    } 
    $total[] = $currentSum; 
    $z++; 
}while($z < $numRows); 
+0

के लिए धन्यवाद यह वही है जो मुझे चाहिए। धन्यवाद – Daniel

0
$subtotal = 0; 
for ($i = 0; $i < $numRows; $i++) { 
    $subtotal += ${'contaH'.$z}[$i] * $final[$i]; 
} 
$total[] = $subtotal; 
+0

फिर से धन्यवाद है। आउटपुट '([0] => 313.76656746 [1] => 0 [2] => 0 [3] => 0) [1] => 0)'।और सही इस तरह कुछ होना चाहिए: '([0] => 0.320670055732 [1] => 0.324886219083 [2] => 0.19494002706 [3] => 0.159503698125) 'प्रयास – Daniel

0

आप Math_Matrix पुस्तकालय में रुचि है जो आप मैट्रिक्स गणित के सभी प्रकार के कर में मदद मिलेगी हो सकता है।

function mat_mult($matrix, $vector) { 
    $result = array(); 
    $matrixWidth = count($matrix[0]); 
    for ($z = 0; $z < $matrixWidth; $z++) { 
     $value = 0; 
     for ($y = 0; $y < $matrixWidth; $y++) { 
      $value += $matrix[$z][$y]*$vector[$y]; 
     } 
     $result[] = $value; 
    } 
    return $result; 
} 

$matrix = array(
    array(1, 1/3.0, 2, 4), 
    array(3, 1, 5, 3), 
    array(1/2.0, 1/5.0, 1, 1/3.0), 
    array(1/4.0, 1/3.0, 3, 1) 
); 
$vector = array(0.26, 0.50, 0.09, 0.16); 

$v2 = mat_mult($matrix, $vector); 

print_r($v2); 

इसके अलावा, यह अधिक टाई के लिए अपने मौजूदा मैट्रिक्स संरचना में:

$matrix = array(); 
for ($z = 0; $z < $numRows; $z++) { 
    $matrix[] = ${'contaH'.$z}; 
} 
संबंधित मुद्दे