合并两个数组并在表格中显示

时间:2016-11-16 23:28:49

标签: php html arrays duplicates html-table

我在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

依旧......

我尝试使用函数arrray combine:

$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中删除重复项。如何获得具有相同值的重复项的好的html表kolicina?

2 个答案:

答案 0 :(得分:0)

如果您有一组键和一组值,并且您想要创建一个具有相应键和值的新数组,则使用

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>';
}

答案 1 :(得分:0)

您不需要使用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
}