2017-07-16 112 views
0

我一直在破壞我的頭在這個數組:分割二維數組到n多基於鍵值

Array (
    [invoicenr] => Array ( 
          [0] => 1234 
          [1] => 1234 
          [2] => 1234 
          [3] => 4321 
          [4] => 3214 
         ) 
    [invoicedate] => Array ( 
          [0] => 17.07.2017. 
          [1] => 17.07.2017. 
          [2] => 17.07.2017. 
          [3] => 11.07.2017. 
          [4] => 11.07.2017.) 
    [amount] => Array ( 
          [0] => 10 
          [1] => 1 
          [2] => 23 
          [3] => 10 
          [4] => 1) 
    [cause] => Array ( 
          [0] => 1 
          [1] => 1 
          [2] => 1 
          [3] => 1 
          [4] => 1) 
) 

我試圖分裂陣列基於第1級密鑰「invoicenr」值以上,但至今沒有運氣。 我期待的結果:

Array (
     [invoicenr] => Array ( 
          [0] => 1234 
          [1] => 1234 
          [2] => 1234) 
     [invoicedate] => Array ( 
          [0] => 17.07.2017. 
          [1] => 17.07.2017. 
          [2] => 17.07.2017.) 
     [amount] => Array ( 
          [0] => 10 
          [1] => 1 
          [2] => 23) 
     [cause] => Array ( 
          [0] => 1 
          [1] => 1 
          [2] => 1) 
      ) 
Array (
     [invoicenr] => Array ( 
          [0] => 4321) 
     [invoicedate] => Array ( 
          [0] => 11.07.2017.) 
     [amount] => Array ( 
          [0] => 10) 
     [cause] => Array ( 
          [0] => 1 ) 
     ) 
Array (
     [invoicenr] => Array ( 
          [0] => 3214) 
     [invoicedate] => Array (
          [0] => 11.07.2017.) 
     [amount] => Array ( 
          [0] => 1) 
     [cause] => Array ( 
          [0] => 1 ) 
     ) 

我想知道這是可能的,怎麼樣,或者我需要先改寫陣列?

謝謝大家,我是新來的編碼和努力學習到目前爲止。 :)

回答

1

請張貼您試圖解決問題的代碼。我相信你需要一個計數器(i)來通過invoicenr和一個臨時變量來記住最後一個值(Array [i]),並將它與invoicenr數組中的下一個值進行比較。如果值相同,則繼續前進,如果值不同,則打印出所有其他數組[i]。

0

我已經finnaly做到了,但我認爲我的方式太原始了。這是我做的:

//Count number of rows in initial array 
$rows = count(array_filter($_POST['invoicenr'])); 
//Crete unique array that contains only $_POST['invoicenr'] which i can count later 
$uniquearray = array(); 
for ($row = 0; $row < $rows; $row++) { 
    $uniquearray[] = $_POST['invoicenr'][$row] ; 
} 
//return unique keys only 
$invoicenrunique=array_keys(array_flip($uniquearray)); 
//count number of rows in unique array 
$invoicenruniquecount=count(array_keys(array_flip($uniquearray))); 
//do magic, this splits main array into n smaller arrays based on $_POST['invoicenr'] 
for($uniquerow = 0; $uniquerow < $invoicenruniquecount; $uniquerow++) { 
    $testarray = array(); 
    for ($row = 0; $row < $rows; $row++) { 
     if($_POST['invoicenr'][$row]==$invoicenrunique[$uniquerow]){ 
      $testarray[$row]['invoicenr']=$_POST['invoicenr'][$row]; 
      $testarray[$row]['invoicedate']=$_POST['invoicedate'][$row]; 
      $testarray[$row]['amount']=$_POST['amount'][$row]; 
      $testarray[$row]['cause']=$_POST['cause'][$row]; 
     } 
    } 
    print_r(array_values($testarray)); 
    echo "<br>"; 
} 

對於如何改進我的解決方案,您有什麼建議嗎?

此致敬禮!