2014-02-10 99 views
0

我的目標是將數組(使用子數組)轉換爲HTML表格。要做到這一點,我必須計算一些行距。 首先,我們給你我的陣列名爲$表的var_dump:相同的操作,不同的結果

array(3) { 
    ["BOUYGUES TELECOM"]=>   /* Mobile carrier */ 
    array(4) { 
    ["number"]=> 
    string(5) "72967" 
    ["date_ok"]=> 
    string(10) "04/10/1996" 
    ["date_ok_edit"]=> 
    string(10) "20/09/2013" 
    ["azimuth"]=> 
    array(4) { 
     ["66.00"]=>    /* Azimuth of an antenna */ 
     array(1) { 
     ["26.00"]=>    /* Height (from floor) of the antenna */ 
     array(1) { 
      ["FH"]=>    /* System/Technology used */ 
      array(1) { 
      [0]=>    /* Ranges of frequencies */ 
      string(18) "37.26 à 37.50 GHz" 
      } 
     } 
     } 
     ["80.00"]=> 
     array(1) { 
     ["26.00"]=> 
     array(5) { 
      ["GSM 1800"]=> 
      array(2) { 
      [0]=> 
      string(22) "1758.30 à 1784.90 MHz" 
      [1]=> 
      string(22) "1853.30 à 1879.90 MHz" 
      } 
      ["GSM 900"]=> 
      array(2) { 
      [0]=> 
      string(20) "880.10 à 889.90 MHz" 
      [1]=> 
      string(20) "925.10 à 934.90 MHz" 
      } 
      ["LTE 1800"]=> 
      array(2) { 
      [0]=> 
      string(22) "1765.00 à 1785.00 MHz" 
      [1]=> 
      string(22) "1860.00 à 1880.00 MHz" 
      } 
      ["UMTS 2100"]=> 
      array(3) { 
      [0]=> 
      string(22) "1900.10 à 1905.10 MHz" 
      [1]=> 
      string(22) "1935.30 à 1950.10 MHz" 
      [2]=> 
      string(22) "2125.30 à 2140.10 MHz" 
      } 
      ["UMTS 900"]=> 
      array(2) { 
      [0]=> 
      string(20) "880.10 à 889.90 MHz" 
      [1]=> 
      string(20) "925.10 à 934.90 MHz" 
      } 
     } 
     } 
     ["180.00"]=> 
     array(1) { 
     ["26.00"]=> 
     array(5) { 
      ["GSM 1800"]=> 
      array(2) { 
      [0]=> 
      string(22) "1758.30 à 1784.90 MHz" 
      [1]=> 
      string(22) "1853.30 à 1879.90 MHz" 
      } 
      ["GSM 900"]=> 
      array(2) { 
      [0]=> 
      string(20) "880.10 à 889.90 MHz" 
      [1]=> 
      string(20) "925.10 à 934.90 MHz" 
      } 
      ["LTE 1800"]=> 
      array(2) { 
      [0]=> 
      string(22) "1765.00 à 1785.00 MHz" 
      [1]=> 
      string(22) "1860.00 à 1880.00 MHz" 
      } 
      ["UMTS 2100"]=> 
      array(3) { 
      [0]=> 
      string(22) "1900.10 à 1905.10 MHz" 
      [1]=> 
      string(22) "1935.30 à 1950.10 MHz" 
      [2]=> 
      string(22) "2125.30 à 2140.10 MHz" 
      } 
      ["UMTS 900"]=> 
      array(2) { 
      [0]=> 
      string(20) "880.10 à 889.90 MHz" 
      [1]=> 
      string(20) "925.10 à 934.90 MHz" 
      } 
     } 
     } 
     ["280.00"]=> 
     array(1) { 
     ["26.00"]=> 
     array(5) { 
      ["GSM 1800"]=> 
      array(2) { 
      [0]=> 
      string(22) "1758.30 à 1784.90 MHz" 
      [1]=> 
      string(22) "1853.30 à 1879.90 MHz" 
      } 
      ["GSM 900"]=> 
      array(2) { 
      [0]=> 
      string(20) "880.10 à 889.90 MHz" 
      [1]=> 
      string(20) "925.10 à 934.90 MHz" 
      } 
      ["LTE 1800"]=> 
      array(2) { 
      [0]=> 
      string(22) "1765.00 à 1785.00 MHz" 
      [1]=> 
      string(22) "1860.00 à 1880.00 MHz" 
      } 
      ["UMTS 2100"]=> 
      array(3) { 
      [0]=> 
      string(22) "1900.10 à 1905.10 MHz" 
      [1]=> 
      string(22) "1935.30 à 1950.10 MHz" 
      [2]=> 
      string(22) "2125.30 à 2140.10 MHz" 
      } 
      ["UMTS 900"]=> 
      array(2) { 
      [0]=> 
      string(20) "880.10 à 889.90 MHz" 
      [1]=> 
      string(20) "925.10 à 934.90 MHz" 
      } 
     } 
     } 
    } 
    } 
    ["ORANGE"]=> 
    array(4) { 
    ["number"]=> 
    string(6) "320884" 
    ["date_ok"]=> 
    string(10) "11/07/2003" 
    ["date_ok_edit"]=> 
    string(10) "06/07/2007" 
    ["azimuth"]=> 
    array(3) { 
     ["0.00"]=> 
     array(1) { 
     ["23.00"]=> 
     array(3) { 
      ["GSM 1800"]=> 
      array(2) { 
      [0]=> 
      string(22) "1713.10 à 1736.90 MHz" 
      [1]=> 
      string(22) "1808.10 à 1831.90 MHz" 
      } 
      ["GSM 900"]=> 
      array(2) { 
      [0]=> 
      string(20) "890.10 à 902.50 MHz" 
      [1]=> 
      string(20) "935.10 à 947.50 MHz" 
      } 
      ["UMTS 2100"]=> 
      array(3) { 
      [0]=> 
      string(22) "1910.10 à 1915.10 MHz" 
      [1]=> 
      string(22) "1964.90 à 1979.70 MHz" 
      [2]=> 
      string(22) "2154.90 à 2169.70 MHz" 
      } 
     } 
     } 
     ["120.00"]=> 
     array(1) { 
     ["23.00"]=> 
     array(3) { 
      ["GSM 1800"]=> 
      array(2) { 
      [0]=> 
      string(22) "1713.10 à 1736.90 MHz" 
      [1]=> 
      string(22) "1808.10 à 1831.90 MHz" 
      } 
      ["GSM 900"]=> 
      array(2) { 
      [0]=> 
      string(20) "890.10 à 902.50 MHz" 
      [1]=> 
      string(20) "935.10 à 947.50 MHz" 
      } 
      ["UMTS 2100"]=> 
      array(3) { 
      [0]=> 
      string(22) "1910.10 à 1915.10 MHz" 
      [1]=> 
      string(22) "1964.90 à 1979.70 MHz" 
      [2]=> 
      string(22) "2154.90 à 2169.70 MHz" 
      } 
     } 
     } 
     ["240.00"]=> 
     array(1) { 
     ["23.00"]=> 
     array(3) { 
      ["GSM 1800"]=> 
      array(2) { 
      [0]=> 
      string(22) "1713.10 à 1736.90 MHz" 
      [1]=> 
      string(22) "1808.10 à 1831.90 MHz" 
      } 
      ["GSM 900"]=> 
      array(2) { 
      [0]=> 
      string(20) "890.10 à 902.50 MHz" 
      [1]=> 
      string(20) "935.10 à 947.50 MHz" 
      } 
      ["UMTS 2100"]=> 
      array(3) { 
      [0]=> 
      string(22) "1910.10 à 1915.10 MHz" 
      [1]=> 
      string(22) "1964.90 à 1979.70 MHz" 
      [2]=> 
      string(22) "2154.90 à 2169.70 MHz" 
      } 
     } 
     } 
    } 
    } 
    ["SFR"]=> 
    &array(4) { 
    ["number"]=> 
    string(6) "453640" 
    ["date_ok"]=> 
    string(10) "25/05/2007" 
    ["date_ok_edit"]=> 
    string(10) "23/04/2010" 
    ["azimuth"]=> 
    array(3) { 
     ["165.00"]=> 
     array(1) { 
     ["25.00"]=> 
     array(2) { 
      ["GSM 1800"]=> 
      array(2) { 
      [0]=> 
      string(22) "1710.00 à 1785.00 MHz" 
      [1]=> 
      string(22) "1805.00 à 1880.00 MHz" 
      } 
      ["UMTS 2100"]=> 
      array(3) { 
      [0]=> 
      string(22) "1915.10 à 1920.10 MHz" 
      [1]=> 
      string(22) "1920.50 à 1935.30 MHz" 
      [2]=> 
      string(22) "2110.50 à 2125.30 MHz" 
      } 
     } 
     } 
     ["243.20"]=> 
     array(1) { 
     ["27.60"]=> 
     array(1) { 
      ["FH"]=> 
      array(1) { 
      [0]=> 
      string(18) "37.26 à 37.50 GHz" 
      } 
     } 
     } 
     ["280.00"]=> 
     &array(1) { 
     ["25.00"]=> 
     &array(2) { 
      ["GSM 1800"]=> 
      array(2) { 
      [0]=> 
      string(22) "1710.00 à 1785.00 MHz" 
      [1]=> 
      string(22) "1805.00 à 1880.00 MHz" 
      } 
      ["UMTS 2100"]=> 
      array(3) { 
      [0]=> 
      string(22) "1915.10 à 1920.10 MHz" 
      [1]=> 
      string(22) "1920.50 à 1935.30 MHz" 
      [2]=> 
      string(22) "2110.50 à 2125.30 MHz" 
      } 
     } 
     } 
    } 
    } 
} 

現在,這個函數計算多少行需要(移動)的載體。

function nbRowsForCarrier($carrier){ 
    global $table; 

    $nb_lines = 0; 

    foreach($table[$carrier]['azimuth'] as $azimuth => $heights){ 
     foreach($heights as $height => $systems){ 
      foreach($systems as $system){ 
       $nb_lines += count($system); 
      } 
     } 
    } 

    return $nb_lines; 
} 

所以,如果我叫nbRowsForCarrier(「SFR」),則返回11(因爲11範圍頻率SFR)的 的問題是,這種結果發生變化時,它從一個foreach叫:

foreach($table as $carrier => $details){ 
    echo nbRowsForCarrier($carrier); // When $carrier="SFR", it returns 13 instead of 11. 
    [...Other operations...] 
} 

對於其他運營商「BOUYGUES TELECOM」和「橙色」,它工作正常。但它不適用於「SFR」。 我高度懷疑引用是問題(請注意,在var_dump中,在SFR陣列中的「array」之前有一些「&」) 也許是光標的問題...我嘗試使用reset(),但沒有成功...

有沒有辦法將此數組複製到其他變量而無需引用(導致問題,我認爲)?

謝謝您的幫助

回答

0

事實上,如果「SFR」數組引用(以下簡稱「&」「陣列」之前),那是因爲我做了一個ksort()對鍵按字母順序排序。 刪除「&」之前「陣列」,然後我得到它的工作,我看到了這一點:PHP foreach by reference causes weird glitch when going through array of objects

對我來說,當我有通過系統整理,我必須這樣做:

// Sort by system 
foreach($table as $carrier => &$info_carrier){ 
    foreach($info_carrier['azimuth'] as &$heights){ 
     foreach($heights as $height => &$systems){ 
      ksort($systems); 
     } 
     unset($systems); // WHAT I ADDED TO GET IT WORKING 
    } 
    unset($heights); // WHAT I ADDED TO GET IT WORKING 
} 
unset($info_carrier); // WHAT I ADDED TO GET IT WORKING 

然後它的工作!

相關問題