2014-02-09 130 views
0

我有一个名为$ excelData的数组数组。用下面的代码 访问阵列索引值

Array ( 
[0] => Array ( 
       [0] => Array ( 
           [0] => name 
           [1] => test 
           [2] => 4 
           [3] => [email protected] 
           [4] => it4249 
           [5] => sha256:1000: 
          ) 
      ) 
[1] => Array ( 
       [0] => Array ( 
           [0] => fseconf 
           [1] => test2 
           [2] => 3 
           [3] => [email protected] 
           [4] => ft9655 
           [5] => sha256:1000: 
             ) 
       ) 
) 

,我试图打印第四届指数在每种情况下(即it4249和ft955):的print_r($ excelData)返回以下

$query = "INSERT INTO tblTest (username, fname, surname, year, email) VALUES"; 
$qPart = array_fill(0, count($excelData), "(?, ?, ?, ?, ?)"); 
$query .= implode(",",$qPart); 
$sth = $dbh->prepare($query); 
$i = 1; 

print_r($excelData); 
echo "<br />"; 
echo "<br />"; 

Foreach($excelData As $Row){ 

      echo "Username: ".$Row[0][4]; 
      echo "<br />"; 
      echo "<br />"; 
      $sth->bindValue($i++, $Row[0][4]); 
      $sth->bindValue($i++, $Row[0][0]); 
      $sth->bindValue($i++, $Row[0][1]); 
      $sth->bindValue($i++, $Row[0][2]); 
      $sth->bindValue($i++, $Row[0][3]); 
} 

但它只是简单地打印it4249。为什么这不起作用,我该如何解决这个问题?

编辑:

更改我的循环引用如下解决我的问题通过,但我不知道为什么 - 任何解释?

Foreach($excelData As &$Row){ 
} 
+2

它适用于我,所以还有其他错误。 – Michel

+1

代码适合我。 –

+0

哦奇怪 - 我已经在循环中添加了其余的代码,以防有其他事情发生? – db579

回答

0

巢下来3次。

foreach ($other as $arr) 
{ 
    foreach($arr as $arr1) 
    { 
     foreach($arr1 as $k=>$v) 
     { 
     if($k==4) 
     { 
      echo $v.'<br/>'; 
      break; // as suggested by u_mulder 
     } 
     } 
    } 
} 

OUTPUT :

it4249 
ft9655 

Demo

+1

使用'break',然后停止执行最后一个'foreach'之后找到合适的价值。 –

+1

如果'($ k == 4)'工作,那么就没有必要循环最后的foreach。 'if($ k == 4){echo $ v。'
';打破; }' –

+1

哦,你是对的。增加了'break';在代码中给出了你的声望。 –

0

我已经运行代码。有用。可能有一些问题,你的阵列()

检查演示

Check demo

1

一个小片段来可能找到在哪里出了问题。如果在定义查询之前查看它是否输出所期望的内容,以及查询之后是否可以,等等。

<?php 
reset($excelData); 
echo count($excelData)."<br>"; //should be 2 
    do{ 
     echo 'KEY: '.key($excelData); //fist 0, then 1 
     $tmp=current($excelData); 
     echo '<pre>'.print_r($tmp,true).'</pre><br>'; 
     } 
    while(next($excelData)); 
?> 

它给我你输出的输出。如果没有,那么你的阵列有问题。

+0

是的,把这个片段直接放在我的Foreach循环之前给了我确切的数组输出我预计。在我的Foreach循环中,我仍然只是响应相同的值两次。 – db579

+0

也许,这只是一个可能的问题,'print_r($ excelData)'会导致问题。如果你删除了?或者让它成为'print_r($ excelData,true)'? – Michel