foreach函数超过2个数组

时间:2016-04-20 03:56:38

标签: php arrays foreach

我需要将数据插入表中..数据来自不同的来源。以下是我的代码。

$title = array(Book A, Book B, Book C);
$number = array(2,1,4);
$lines = array(Maria, Smith, Abner);

for($i=1; $i<count($lines); $i++)
{
   print '<tr>';
   print '<td>'.$title[$i].'</td>';
   print '<td>P'.$number[$i].'</td>';
   print '<td>['.$lines[$i].']</td>';
   print '<td></td>';
   print '</tr>';
}

似乎无法正常工作:/数组在我的表格中无法正确显示。

我期待输出如下:

------------------------------------------------
| Title     |    No    | Lines       | Remarks |
------------------------------------------------
| Book A    |    2     | Maria       |         |
| Book B    |    1     | Smith       |         |
| Book C    |    4     | Abner       |         |
------------------------------------------------

目前..我得到以下输出:

------------------------------------------------
| Title     |    No    | Lines       | Remarks |
------------------------------------------------
|  Book A   |    2     | Maria       |         |
|           |          | Smith       |         |
|           |          | Abner       |         |
------------------------------------------------

5 个答案:

答案 0 :(得分:2)

如果您的阵列具有不同的键,您可以将它们“重置”为从零开始。只需使用$array = array_values($array)即可。引自manual

  

array_values()返回数组中的所有值,并以数字形式索引数组。

在此之后您的代码将起作用。这就是你的例子的修改方式:

$title = array('Book A', 'Book B', 'Book C');
$number = array("a" => 2, "b" => 1, "c" => 4);
$lines = array('Maria', 'Smith', 7 => 'Abner');
/* At this point you have some arrays with unknown keys.
   It can be [0 => item, 1 => item2] or ['name' => item, 'name2' => item2]
   or even with skipped keys [0 => item, 7 => item2]
*/


// Reset keys for all arrays. Now all arrays will contain keys 0, 1, 2 etc.
$title = array_values($title);
$number = array_values($number);
$lines = array_values($lines);

for($i = 0; $i < count($lines); $i++) // Note, arrays now are zero-based, you must start from $i = 0
{
    print '<tr>';
    print '<td>'.$title[$i].'</td>';
    print '<td>P'.$number[$i].'</td>';
    print '<td>['.$lines[$i].']</td>';
    print '<td></td>';
    print '</tr>';
}

答案 1 :(得分:1)

你刚才把i = 0;因为数组从0索引开始并尝试下面的代码可能对你有帮助。

PersonName

答案 2 :(得分:1)

如果你传递null作为第一个参数,然后是你想要合并的数组,那么将单独的数组与array_map()合并是一个巧妙的技巧。

引用文档中的示例#4

  

这个函数的一个有趣用途是构造一个数组数组,通过使用NULL作为回调函数的名称可以很容易地执行它

将您的示例用于上下文:

<?php

$titles  = ['Book A', 'Book B', 'Book C'];
$numbers = [2,1,4];
$lines   = ['Maria', 'Smith', 'Abner'];

// create an 'array of arrays'
$rows = array_map(null, $titles, $numbers, $lines);

var_dump($rows);

收率:

array (size=3)
  0 => 
    array (size=3)
      0 => string 'Book A' (length=6)
      1 => int 2
      2 => string 'Maria' (length=5)
  1 => 
    array (size=3)
      0 => string 'Book B' (length=6)
      1 => int 1
      2 => string 'Smith' (length=5)
  2 => 
    array (size=3)
      0 => string 'Book C' (length=6)
      1 => int 4
      2 => string 'Abner' (length=5)

然后你可以很容易地迭代它,就像这样:

foreach ($rows as $row) {
    list($title, $number, $line) = $row;
    printf('<tr><td>%s</td><td>%s</td><td>%s</td></tr>',
        $title, $number, $line);
}

这应该给你类似的东西:

<tr><td>Book A</td><td>2</td><td>Maria</td></tr>
<tr><td>Book B</td><td>1</td><td>Smith</td></tr>
<tr><td>Book C</td><td>4</td><td>Abner</td></tr>

这种方法的一个有用的副作用是你的数组不必是相同的长度;在适用的情况下,null将用于填补任何“缺失”值。

另一个简单的例子:

<?php

$letters = range('a', 'd'); // ['a', 'b', 'c', 'd']
$numbers = range(1, 3);     // [1, 2, 3]
$merged  = array_map(null, $letters, $numbers);

var_dump($merged);

收率:

array (size=4)
  0 => 
    array (size=2)
      0 => string 'a' (length=1)
      1 => int 1
  1 => 
    array (size=2)
      0 => string 'b' (length=1)
      1 => int 2
  2 => 
    array (size=2)
      0 => string 'c' (length=1)
      1 => int 3
  3 => 
    array (size=2)
      0 => string 'd' (length=1)
      1 => null

希望这会有所帮助:)

答案 3 :(得分:0)

您可以尝试修改代码,如下所示:

foreach($lines as $z => $value)
{
   print '<tr>';
   print '<td>'.$title[$z].'</td>';
   print '<td>P'.$number[$z].'</td>';
   print '<td>['.$value.']</td>';
   print '<td></td>';
   print '</tr>';
}

答案 4 :(得分:0)

我发现我所有数组的数组索引都不是顺序的。

例如:$ title =

array [0] = Book A

array [5] = Book B

array [9] = Book C

所以,这可能是它没有相应显示的原因。我不能使用功能&#39;。但是,我无法重新编号索引,因为它是我继续使用下一个模块/函数的关键。

所以,我尝试了以下代码..但似乎缺少了一些东西..

$i=0;
if (!empty($title)){
foreach($title as $key => $value){
   $y = $number[$key];
   if ($i<count($lines))
   {   $z = $lines[$i];
       $i+1;
   }

   print '<tr>';
   print '<td>'.$value.'</td>';
   print '<td>'.$y.'</td>';
   print '<td>['.$z.']</td>';
   print '<td></td>';
   print '</tr>';

   }
}

以下是我得到的输出。现在,$ line的数组没有正确显示。

------------------------------------------------
| Title     |    No    | Lines       | Remarks |
------------------------------------------------
| Book A    |    2     | Maria       |         |
| Book B    |    1     | Maria       |         |
| Book C    |    4     | Maria       |         |
------------------------------------------------