访问数组中数组索引的值

时间:2014-02-09 07:36:23

标签: php arrays

我有一个名为$ excelData的数组。 print_r($ excelData)返回以下内容:

Array ( 
[0] => Array ( 
              [0] => Array ( 
                              [0] => name 
                              [1] => test 
                              [2] => 4 
                              [3] => test@test.com 
                              [4] => it4249 
                              [5] => sha256:1000: 
                             ) 
              ) 
[1] => Array ( 
              [0] => Array ( 
                              [0] => fseconf 
                              [1] => test2 
                              [2] => 3 
                              [3] => example@test.com 
                              [4] => ft9655 
                              [5] => sha256:1000: 
                                         ) 
               ) 
)

我正在尝试使用以下代码打印每种情况下的第4个索引(即it4249和ft955):

$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]); 
 }

但它只是打印了42249次。为什么这不起作用,我该如何做到这一点?

修改

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

Foreach($excelData As &$Row){
}

3 个答案:

答案 0 :(得分: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));
?>

它给了我你展示的输出。如果没有,你的阵列肯定存在问题。

答案 1 :(得分: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

答案 2 :(得分:0)

我已经运行了你的代码。有用。您的数组可能存在一些问题()

检查演示

Check demo