如何在多维非关联数组上使用foreach循环

时间:2018-02-18 19:44:31

标签: php arrays

我基本上将csv文件employee_data的行读入一个名为$ data

的数组中
$dataSrc = "persistence/employee_data.csv";
    $dataFile = fopen($dataSrc, "r") or die("Unable to open file!");
     $i=0;  //index for the array



   while (($data = fgetcsv($dataFile)) !== FALSE) {
  //$data is an array of the csv elements
    print_r($data);
}

    fclose($dataFile);

$data数组插入print_r函数时,{@ 1}}数组中的元素如下所示。

Array ( [0] => JOHN WILLIAMS [1] => 6/8/1998 [2] => 55456434E [3] => 4321 )
Array ( [0] => SARAH JONES [1] => 15/01/1982 [2] => 56834645Q [3] => 1234 )
Array ( [0] => JAMES Brennan [1] => 09/05/1978 [2] => 25689514W [3] => 8575 ) 

此阵列中有3个阵列,但阵列中的每个阵列都没有单独的键。

当我尝试遍历数组时,它会给我一个警告 “警告:为foreach()提供的参数无效”

我知道像这样的数组

$food = array('Healthy'=>
                        array('Salad', 'Vegetables', 'Pasta'),
               'Unhealthy'=>
                        array('Pizza','Ice cream'));

你可以使用这样的东西来访问数组数组中的元素。

foreach($food as $element => $inner_array)
{
    echo $element;

    foreach($inner_array as $item)
    {

        echo $item;
    }

}

此方法不适用于我的$data array。 您将如何获得对$data等数组的访问权限?

2 个答案:

答案 0 :(得分:2)

由于 fgetcsv()逐行读取,因此$ data始终包含员工的最后一条记录,即单维数组。在这里你需要将数据存储到另一个数组(制作多维数组)

试试这个......

$dataSrc = "persistence/employee_data.csv";
$dataFile = fopen($dataSrc, "r") or die("Unable to open file!");
$i=0;  //index for the array
//creating $result array for storing each employee data.
$result = [];

while (($data = fgetcsv($dataFile)) !== FALSE) {
  //assign each employee data to $result array. now result will be multidimensional array.
    $result[] = $data;
}
fclose($dataFile);

您现在可以使用

foreach($result as $resultKey => $employees)
{
    //display key of $result.
    echo $resultKey;

    foreach($employees as $data)
   {     
        echo $data;
    }

}

答案 1 :(得分:0)

首先,你应该让你的$data变量是一个数组,然后是array_push($data, fgetcsv($dataFile)),所以你可能想做这样的事情:

$dataArray = [];
while (($data = fgetcsv($dataFile)) !== FALSE) {
    array_push($dataArray, $data);
}

然后按照: 由于您的数组不是相关的而不是:

foreach($food as $element => $inner_array)
{
    echo $element;

    foreach($inner_array as $item)
    {

        echo $item;
    }

}

在你的代码中你没有=> inner_array,你的代码如下:

foreach($food as $element)
{

    foreach($element as $item)
    {

        echo $item;
    }

}