2011-10-27 24 views
4

我正在嘗試這個循環,但我在$m[2][3]中遇到了問題。沒有顯示任何值。所以我有一些增量問題。循環中的數組值不好

$nArr = array('A', 'B', 'C', 'D', 'E', 'F'); 

$lp = 4; 

for ($i = 0; $i < $lp; $i++) { 
    $m[$i][$i] = 1; 
    for ($x = $i; $x < $lp; $x++) { 
     $v = $i+$i; 
     $m[$i][$x+1] = $nArr[$x+$v]; 
    } 
} 

這是我的輸出:

1 + A + B + C + - 1 + D + E + - 1 + + - 1 + 

我想要的輸出:

1 + A + B + C + - 1 + D + E + - 1 + F + - 1 + 

詳細:

echo $m[0][0]."+"; 1 
echo $m[0][1]."+"; A 
echo $m[0][2]."+"; B 
echo $m[0][3]."+"; C 
echo " - "; 
echo $m[1][1]."+"; 1 
echo $m[1][2]."+"; D 
echo $m[1][3]."+"; E 
echo "- "; 
echo $m[2][2]."+";1 
echo $m[2][3]."+"; //error, must be F 
echo "- "; 
echo $m[3][3]."+"; 1 
+0

他說什麼...... –

回答

2

你的問題是在你的進展。在第二個 「爲」 您的進展迅速增加:

$v = $i+$i;   
$m[$i][$x+1] = $nArr[$x+$v]; 
  • 在第一次迭代開始於0 + 0 + 0($ X + $ 1 + $ⅰ)= 0 = 「A」
  • 第二次迭代以1 + 1 + 1($ x + $ i + $ i)= 3 = 「D」
  • 開始,第三次迭代以2 + 2 + 2($ x + $ i + $ i)= 6 = null,你的數組有6個元素,所以你的最大索引是5.

你應該改變,以獲得指標的下一個發展中的進展:0,3,5

試試這個:

$nArr = array('A', 'B', 'C', 'D', 'E', 'F'); 
$lp = 4;     
for ($i = 0; $i < $lp; $i++) { 
    $m[$i][$i] = 1;    
    for ($x = $i; $x < $lp; $x++) {     
     $v = $i+ceil($i/2); 
     $m[$i][$x+1] = $nArr[$x+$v];    
    }   
} 
+0

'1+ B + C + D + - 1 + D + E + - 1 + F + - 1 +'<<輸出 – Daniel

+0

$ v = $ i + ceil($ i/2); ? – Galled

+0

完美:),很多感謝的人 – Daniel

0

$lp是4,我敢打賭,它應該是5.或者更好的設置爲count($nArr) - 1

PS。這個循環是什麼?

編輯:沒關係,那並沒有解決它。

+2

我確認,問題仍然存在,但是謝謝 – Daniel

0

問題是你的算法是錯誤的。您的代碼集M [i] [j] =

  • 未定義如果j <我
  • 1,如果J =
  • NARR [2 * I + J - 1]如果j>我

所以m[2][3] = nArr[6],這是未定義的。

這並不完全清楚,我你想要做什麼,或者爲什麼,但我最好的猜測是這樣的:

$nArr = array('A', 'B', 'C', 'D', 'E', 'F'); 

$lp = 4; 

$nArr_index = 0; 
for ($i = 0; $i < $lp; $i++) { 
    $m[$i][$i] = 1; 
    for ($j = $i + 1; $j <= $lp; $j++) { 
     $m[$i][$j] = $nArr[$nArr_index++]; 
    } 
} 
+0

'1 + A + B + C + - 1 + E + F + - 1 ++ - 1 +'<<<輸出 – Daniel

1

大聲笑,不得不接受挑戰......

$nArr = array('A', 'B', 'C', 'D', 'E', 'F'); 

$counter = 3; 

while ($counter > 0) {  

    $chunkedValues[$counter][0] = 1; 

    for ($j = 0 ; $j < $counter ; $j++) { 
     $chunkedValues[$counter][$j + 1] = $nArr[$j]; 
    } 

    $nArr = array_slice($nArr, $counter--); 
} 

var_dump($chunkedValues); 
+0

方法有點更復雜,工作太多,謝謝 – Daniel