2012-10-23 98 views
1

爲什麼下面的代碼:定義索引+元素

if (isset($_GET['trainType']) && isset($_GET['onTime']) && isset($_GET['gotSeat'])) { 
    $train[0]['trainType'] = $_GET['trainType']; 
    $train[0]['trainType']['onTime'] = $_GET['onTime']; 
    $train[0]['trainType']['gotSeat'] = $_GET['gotSeat']; 
    echo '<pre>'; 
    print_r($train); 
    echo '</pre>'; 
} 

返回以下陣列:

Array 
(
    [0] => Array 
     (
      [trainType] => tLine 
     ) 

) 

我最初以爲它會返回一些更類似於此:

Array 
(
    [0] => Array 
     (
      [trainType] => 'passenger' 
      Array => 
       (
        [onTime] => true 
        [gotSeat] => true 
       ) 

     ) 

) 

任何指導我應該做什麼來實現我想要做的事情?我希望我的代碼使我想要做的事明顯。

+0

可以的var_dump()你的$ _GET數組? –

+0

'trainType = string'VLine'(length = 5) onTime = string'true'(length = 4) gotSeat = string'true'(length = 4)' – anditpainsme

+0

'所以你試圖追加到字符串它是一個數組 –

回答

1

這條線將設置trainType爲字符串值:

$train[0]['trainType'] = 'hello'; 

然後這些線實際上將用於字符置換,有輕微的扭曲:

$train[0]['trainType']['onTime'] = 'foo'; 
$train[0]['trainType']['gotSeat'] = 'bar'; 

兩個onTime和將導致在0(因爲您使用的是字符串),並將用f然後b替換第一個字符。

因此print_r($train)回報:

(
    [0] => Array 
     (
      [trainType] => bello 
     ) 

) 

這是我怎麼會格式化此數據:

// define our list of trains 
$train = array(); 

// create a new train 
$new = new stdClass; 
$new->type = 'a'; 
$new->onTime = 'b'; 
$new->gotSeat = 'c'; 

// add the new train to our list 
$train[] = $new; 

print_r($trains)結果:

Array 
(
    [0] => stdClass Object 
     (
      [type] => a 
      [onTime] => b 
      [gotSeat] => c 
     ) 

) 

訪問此數據:

echo $trains[0]->type; // returns 'a' 
echo $trains[0]->onTime; // returns 'b' 
echo $trains[0]->gotSeat; // returns 'c' 
+0

這很酷。我從來沒有真正使用過對象,但這可能是我應該做的。即使我原本可以做到這一點,我的原始數組,這個答案給了我一個想法,這將改善我的代碼,從長遠來看,所以我明白這一點。然而,我有一個問題是爲什麼數組的內容混合而不是被忽略,就像你說的那樣?(即:VLine成爲TLine(將VL的第一個字母替換爲True的T(來自其他$ _GET變量) – anditpainsme

+0

我已更新我的答案以解決此問題。直到我在本地運行測試。 – Alex

0

你是隱式設置(或需要)的關鍵= 0

array (
    "onTime" => true, 
    "gotSeat" => true 
) 

所以你必須,而不是隻是這樣做:

if (isset($_GET['trainType']) && isset($_GET['onTime']) && isset($_GET['gotSeat'])) { 
    $train[0]['trainType'] = $_GET['trainType']; 
    $train[0][0]['onTime'] = $_GET['onTime']; 
    $train[0][0]['gotSeat'] = $_GET['gotSeat']; 
    echo '<pre>'; 
    print_r($train); 
    echo '</pre>'; 
} 

注意,我所做的是改變不正確$train[0]['trainType']['onTime']$train[0][0]['trainType']在您的代碼中,並且類似地爲。

,也可以定義一個新的關鍵,也許是這樣的:$train[0]['booking']['onTime'] = ...