2015-04-29 13 views
-1

我在我的php應用程序中有一個巨大而複雜的問題。下面是詳細信息:更改數組的形式(PHP)

我現在有這個作爲我的數組(VAR傾倒):

array (size=6) 
    0 => string '11/04/15' (length=8) 
    1 => string '15/04/15' (length=8) 
    2 => string '19/04/15' (length=8) 
    3 => string '1' (length=1) 
    4 => string '1' (length=1) 
    5 => string '3' (length=1) 

但我想它顯示爲:

array (size=6) 
    array(size=2) 
    string '11/04/15' (length=8) 
    string '1' (length=1) 
    array(size=2) 
    string '15/04/15' (length=8) 
    string '1' (length=1) 
    array(size=2) 
    string '19/04/15' (length=8) 
    string '3' (length=1) 

正如你可以看到,我想添加子陣列,重新排序結構並刪除密鑰。起始者數組值改變,所以可能會有更多的日期/更少的日期和數字。而且它的鏈接,關鍵字0應該用關鍵字3和關鍵字1用關鍵字4等進行填充。我認爲這是足夠的信息。注:我想要安排圖表PHP的條形圖(http://www.chartphp.com/)的數據。

+1

你有沒有嘗試過的東西?你的代碼在哪裏? – Rizier123

+0

@ Rizier123不是真的,因爲我完全困惑於我將如何開始。 – user3762041

+0

你不能卡住,直到你嘗試一些東西!所以,只要嘗試一些東西,當你被卡住後,說:我在這裏,我現在有想法如何得到進一步和如何解決它 – Rizier123

回答

0

這應該爲你工作:

由於這是很明顯的,我要承擔,這背後的預期結果的模式應該將這些數字與排序的ASC日期相結合。

所以,我在這裏首先將所有日期與preg_grep()進行比較。然後我通過從原始數組和日期數組中獲取array_diff()來獲得數字。

然後,我比較我與strtotime()得到timestampes和$numbers陣列我有點簡單地sort()我整理兩個陣列ASC和$dates陣列我usort()排序。

最後,我簡單地通過兩個陣列循環通過array_map()然後我創建預期的結果。

<?php 

    $arr = [ 
      "19/04/15", 
      "11/04/15", 
      "15/04/15", 
      "3", 
      "1", 
      "1", 
     ]; 

    $dates = preg_grep("/\d{2}\/\d{2}\/\d{2}/", $arr); 
    $numbers = array_diff($arr, $dates); 

    sort($numbers); 
    usort($dates, function($a, $b){ 
     if(strtotime($a) == strtotime($b)) 
      return 0; 
     return strtotime($a) < strtotime($b) ? 1 : -1; 
    }); 

    $result = array_map(function($v1, $v2){ 
     return [$v1, $v2]; 
    }, $dates, $numbers); 

    print_r($result); 

?> 

輸出:

Array 
(
    [0] => Array 
     (
      [0] => 11/04/15 
      [1] => 1 
     ) 

    [1] => Array 
     (
      [0] => 15/04/15 
      [1] => 1 
     ) 

    [2] => Array 
     (
      [0] => 19/04/15 
      [1] => 3 
     ) 

) 
+0

工作出色。 https://imgur.com/48HPUQ6 謝謝。 – user3762041

+0

@ user3762041不客氣!有一個愉快的一天:D – Rizier123

+0

@ Rizier123爲什麼不strtotime($ a) - strtotime($ b)?我不知道什麼? ) – splash58

1

我的做法是以下幾點:

  1. 經過在foreach循環數組值,並找出當第一個數字開始(在這種情況下,它是4元)
  2. 保存變量內部的數字。
  3. 創建一個新陣列
  4. 再次瀏覽舊陣列並獲取對,然後將它們推入新陣列。

的代碼將類似於此:

<? 
$old = array("date1","date2","date3",1,2,3); 
$n = null; 
foreach($old as $k => $v){ 
    if(/*CHECK HERE IF $v is NOT A DATE anymore*/){ 
    $n = $k; 
    break; 
    } 
} 
$new = array(); 
foreach($old as $k => $v){ 
    if($k < $n){ 
    $temp = array($v, $old[$k+$n]); 
    array_push($new, $temp); 
    } 
} 
var_dump ($new); 
?>