2014-09-13 83 views
1

我有一個名爲「觀察」的數組(從Python應用程序發佈)。它看起來像這樣:PHP foreach不像預期的那樣行爲

Array 
(
[0] => Array 
    (
     ['remote_id'] => 1 
     ['dimension_id'] => 1 
     ['metric'] => 1 
    ) 

[1] => Array 
    (
     ['remote_id'] => 1 
     ['dimension'] => 2 
     ['metric'] => 2 
    ) 

[2] => Array 
    (
     ['remote_id'] => 1 
     ['dimension_id'] => 3 
     ['metric'] => 3 
    ) 
(etc) 

我想通過remote_id,dimension_id和度量的所有實例進行迭代,並將其寫入到數據庫。但我不能訪問它們 - 這是我的PHP:

foreach ($_POST["observations"] as $observation) { 
echo "Let's try and access the whole array... \n"; 
print_r ($observation); 
echo "But what about the sub elements? \n"; 
print_r ($observation[0]); 
print_r ($observation['dimension_id']); 
} 

這將返回:

Let's try and access the whole array... 
Array 
(
    ['remote_id'] => 1 
    ['dimension_id'] => 1 
    ['metric'] => 1 
) 
But what about the sub elements? 
Let's try and access the whole array... 
Array 
(
    ['remote_id'] => 1 
    ['dimension'] => 2 
    ['metric'] => 2 
) 
But what about the sub elements? 
(etc) 

所以我的print_r($觀察[0])和print_r的($觀察[ 'dimension_id'])都無法訪問相應的子元素並返回空。我在這裏錯過了什麼?

編輯:關於我的(可能畸形的)POST的幾個問題。這樣做在Python像這樣:

data = urllib.urlencode([ 
     ("observations[0]['remote_id']", 1), 
     ("observations[0]['dimension_id']", 1), 
     ("observations[0]['metric']",metric1), 

     ("observations[1]['remote_id']", 1), 
     ("observations[1]['dimension']", 2), 
     ("observations[1]['metric']", metric2), 

     ("observations[2]['remote_id']", 1), 
     ("observations[2]['dimension_id']", 3), 
     ("observations[2]['metric']",metric3), 

     ("observations[3]['remote_id']", 1), 
     ("observations[3]['dimension_id']", 4), 
     ("observations[3]['metric']",metric4), 

     ("observations[4]['remote_id']", 1), 
     ("observations[4]['dimension_id']", 5), 
     ("observations[4]['metric']",metric5), 
    ]) 
    response = urllib2.urlopen(url=url, data=data) 
+0

'$ observation'中沒有索引0。索引'dimension_id'存在並且還有'dimension' - 這是正確的? – 2014-09-13 13:59:11

+0

'$ observation ['dimension_id']'應該可以工作。啓用錯誤報告,你會注意到錯誤的鍵 – kero 2014-09-13 13:59:14

+2

查看'var_dump(array_keys($ observation))',然後看看[this](http://3v4l.org/D3eRR)。好像你的POST的鍵有多餘的引號,你需要使用'$ observation [「'metric'」]'而不是通常的'$ observation ['metric']''。 (當然,正確的解決方案是修復你的POSTing代碼*而不是*首先添加這些額外的引號。) – DCoder 2014-09-13 13:59:35

回答

1

這工作根據您給定數組:

$array = Array(
     0 => Array 
     (
      'remote_id' => 1, 
      'dimension_id' => 1, 
      'metric' => 1 
     ), 
     1 => Array 
      (
       'remote_id' => 1, 
       'dimension_id' => 2, 
       'metric' => 2 
      ), 
     2 => Array 
      (
       'remote_id' => 1, 
       'dimension_id' => 3, 
       'metric' => 3 
      ) 
); 
foreach ($array as $observation) { 

    echo "Remote id: ". $observation['remote_id']."<br />"; 
    echo "Dimension id: ". $observation['remote_id']."<br />"; 
    echo "Metric: ". $observation['metric']."<br />"; 
} 

,將打印:

Remote id: 1 
Dimension id: 1 
Metric: 1 
Remote id: 1 
Dimension id: 1 
Metric: 2 
Remote id: 1 
Dimension id: 1 
Metric: 3 

但它看起來像你的$_POST["observations"]不是一個數組的$observation的,但只有一個$observation

您的表單可能有問題。您是否在輸入中使用了陣列,如 <input type="text" name="observations[0]['metric']" />

+1

奇怪 - 在Python中使用我的POST定義更新原始文件。 – 2014-09-13 15:08:44

+1

對不起,我沒有Python的知識。 – 2014-09-13 15:37:30

相關問題