2015-12-04 133 views
1

我對陣列不太好,但我在嘗試。雖然不能確定這一點。如果單位大於1,我希望在每個「單位數」末尾加上$text2這個腳本。它是丹麥語。解析錯誤:語法錯誤,意外的'=>'(T_DOUBLE_ARROW)

AR是一年, 鬃是月, UGE是一週, 等等,等等

function humanTiming ($time) 
{ 

    $time = time() - $time; // to get the time since that moment 
    $time = ($time<1)? 1 : $time; 
    $tokens = array (
     31536000 => 'år' => '', 
     2592000 => 'måned' => 'er', 
     604800 => 'uge' => 'r', 
     86400 => 'dag' => 'e', 
     3600 => 'time' => 'r', 
     60 => 'minut' => 'ter', 
     1 => 'sekund' => 'er' 
    ); 

    foreach ($tokens as $unit => $text => $text2) { 
     if ($time < $unit) continue; 
     $numberOfUnits = floor($time/$unit); 
     return $numberOfUnits.' '.$text.(($numberOfUnits>1)?'.$text2.':''); 
    } 

} 

$time = $row['timestamp']; 
echo humanTiming($time); 

回答

4

PHP多維數組不以這種方式工作,

$tokens = [ 
    31536000 => 'år' => '', 
]; 

做它這樣:

$tokens = [ 
    31536000 => ['år' => ''], 
    2592000 => ['måned' => 'er'], 
]; 

[ ]是一個數組的符號,可以從PHP 5.4中使用,如果您有早期版本,使用array()代替。)

雖然我不知道這是否是你所需要的東西..

當你有一個特定類型的數組,你應該嘗試使用對象。它們首先看起來更加困難,但它們對於真實而言更容易(與C++ struct相比也許)。

回答進行評論,環foreach ($tokens as $unit => $text => $text2)不起作用:

您可以在維數組不循環,容易。 你需要2嵌套的foreach

foreach ($tokens as $token => $unitArray) { // outer array 
    echo $token, PHP_EOL; 
    foreach ($unitArray as $unit => $text) { // inner array 
     echo $unit . ' has text: ' . $text, PHP_EOL; 
    } 
} 

參數語法:

foreach ($array as $value) 
foreach ($array as $key => $value) 

不要被什麼是關鍵的,什麼是價值,價值是總是你賦值的變量混淆(到鍵),不管是哪種類型的變量。如果您未指定密鑰,則它會自動以0開頭的數字數組。

+0

我確定這就是我要找的。我會研究物體!謝謝。我現在得到這條線的錯誤: foreach($ tokens as $ unit => $ text => $ text2){ 我該如何解決這個問題? – Morten

+1

@Morten和以前一樣:)不要鏈'=>'運算符,但是像Dan的答案中的嵌套數組一樣,使用嵌套的foreach。 –

+0

太棒了!非常感謝 - 它的作用像一個魅力! @MorganTouvereyQuilling - 謝謝:) – Morten

相關問題