【问题标题】:Combine two arrays and show in a table合并两个数组并显示在一个表格中
【发布时间】:2017-03-31 08:41:51
【问题描述】:

我在 php 中有两个数组:

$kolicina =Array ( [0] => 5 [1] => 7 [2] => 5 [3] => 7 )

$array =Array ( 
    [0] => Array ( 
        [kodProizvoda] => 2 
        [imeProizvoda] => Fanta 
        [jedinica] => litra 
        [cijena] => 7 
    ) 
    [1] => Array ( 
        [kodProizvoda] => 1 
        [imeProizvoda] => Coca Cola 
        [jedinica] => litra 
        [cijena] => 15 
    ) 
    [2] => Array ( 
        [kodProizvoda] => 3 
        [imeProizvoda] => Sprite 
        [jedinica] => litra 
        [cijena] => 17 
    ) 
    [3] => Array ( 
        [kodProizvoda] => 5 
        [imeProizvoda] => Juice 
        [jedinica] => litra 
        [cijena] => 14 
    ) 
)

如何在表格中显示如下:

kolicina | kodproizvoda | imeProizvoda |jedinica | cijena 
   5     |      2       | fanta        | litra   |   7
   7     |      1       | coca cola    |litra    | 15

等等……

我尝试了函数数组组合:

$brojac = 0;
foreach (array_combine($kolicina, $array) as $code => $name) {
    $name= implode("<td>", $name);
    echo '<tr>';
    echo '<td> <input type="number" id="'.$brojac.'" class="kol" name="kolicina[]" value="'.$code.'"></td>';
    echo '<td> '.$name.'</td>';
    echo '<td id="iznostbl'.$brojac.'"> </td>';
    echo '</tr>';
    $brojac++;
}

但是这个函数会从 kolicina 中删除重复项。如何获得具有相同值 kolicina 的重复项的良好 html 表?

【问题讨论】:

标签: php html arrays duplicates html-table


【解决方案1】:

array_combine 用于当您有一个键数组和一个值数组,并且您想要创建一个具有相应键和值的新数组时。 $kolicina 不是键,所以没有理由使用它。您会丢失重复项,因为关联数组只能有一个元素具有相同的键。

您只需要遍历数组索引,然后访问两个数组中的元素:

foreach ($kolicina as $brojac => $code) {
    $row = $array[$brojac];
    echo '<tr>';
    echo '<td> <input type="number" id="'.$brojac.'" class="kol" name="kolicina[]" value="'.$code.'"></td>';
    echo "<td>{$row['kodProizvoda'}</td><td>{$row['imeProizvoda'}</td><td>{$row['jedinica'}</td><td>{$row['cijena'}</td>";
    echo '</tr>';
}

【讨论】:

    【解决方案2】:

    您不需要使用array_combine。只需使用 foreach 遍历其中一个数组并使用索引(在您的情况下为:$code)来查找另一个数组的关联元素。请参见下面的示例。

    您也可以只使用迭代器索引$code 代替您在循环外设置并在每次迭代后递增的变量(即$brojac),因为它也从第一个索引(即0)开始通过最后一个索引(即数组的长度 - 1)。

    foreach ($array as $code => $name) {
        $name= implode("</td><td>", $name);
        echo '<tr>';
        echo '<td> <input type="number" id="'.$kolicina[$code].'" class="kol" name="kolicina[]" value="'.$code.'">'.$kolicina[$code].'</td>';
        echo '<td> '.$name.'</td>';
        echo '<td id="iznostbl'.$code.'"> </td>';
        echo '</tr>';
    }
    

    看看this phpfiddle

    编辑: 您可以添加一些逻辑来处理两个数组可能具有不同长度的情况 - 如果是这种情况,您可能不想显示表格,以防丢失数据(或者至少在尝试在数组$kolicina 中找到一个不存在的元素)。为此,比较每个数组上count() 的值。

    if (count($array) == count($kolicina)) {
        //show the table
    }
    else {
        //show a message about missing data? or some other action
    }
    

    【讨论】:

      猜你喜欢
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      相关资源
      最近更新 更多