2016-08-28 140 views
2

後推我有這樣改變變量值和循環

$jumlahcolspan = array();//new array 
$horizontaldeep = 5; 
$level = array(5,4,3,8,7);//old array 
for ($j = 0; $j < $horizontaldeep; $j++) { 
    $jml = 1; 
    for ($i = $j + 1; $i < $horizontaldeep; $i++) { 
     $jml = $level[$i] * $jml; 
    } 
    array_push($jumlahcolspan, $jml); 
} 

代碼說得簡單,我想是從$i+1乘舊陣列值指數開始到最後,並將它推到另一個陣列。 因此,它是這樣

old array: [5, 4, 3, 8, 7] 

new array: [4*3*8*7, 3*8*7, 7, 1] 

一些事情我已經試過,但它不工作也

for ($j = 0; $j < $horizontaldeep; $j++) { 
    $jml = 1; 
    for ($i = $j + 1; $i < $horizontaldeep; $i++) { 
     global $jml; 
     $jml = $level[$i] * $jml; 
    } 
    array_push($jumlahcolspan, $jml); 
} 

想這太但不也行。

for ($j = 0; $j < $horizontaldeep; $j++) { 
    array_push($jumlahcolspan, array_product(array_slice($level, $j+1))); 
} 

注意:現在我正在檢查我的完整代碼。在我的代碼中可能是不正確的。 我認爲這個問題與$jml變量有關,但我不知道如何解決這個問題。誰能幫我?

+0

'爲($ J = 0; $Ĵ<$ horizo​​ntaldeep; $ J ++){array_push($ jumlahcolspan,array_product(array_slice($水平,$ J + 1))); }' 完美地工作。我認爲問題的發生是因爲我只刷新頁面,而不是重新加載整個頁面。 – Kurniawantaari

回答

0

一種方法是使用Recursive Function來實現該目標。下面的遞歸函數演示瞭如何。順便說一句,你也可以quick-test it here

<?php 

    $oldArray = [5,4,3,8,7]; 

    function arrayMatrixMultiply(array $old, array &$newArray=[]){ 
     $result  = 1; 
     foreach($old as $key=>$value){ 
      if($key != 0){ 
       $result*=$value; 
      } 
     } 
     $newArray[] = $result; 
     array_splice($old, 0, 1); 
     if(!empty($old)){ 
      // JUST RECURSE TILL THE $oldArray BECOMES EMPTY 
      arrayMatrixMultiply($old, $newArray); 
     } 
     return $newArray; 
    } 

    $newArray = arrayMatrixMultiply($oldArray); 

    var_dump($newArray); 
    // PRODUCES:: 
    array (size=5) 
     0 => int 672 
     1 => int 168 
     2 => int 56 
     3 => int 7