2012-10-23 66 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'] = ...