简体   繁体   中英

Show array in PHP html without repeating rows

I have the following problem, it turns out that I have the following arrangement:

$array85 = array(
            0=> array(
                     "id"=> "15",
                     "estilo"=> "0053",
                     "codigo"=>  "4444444.23",
                     "color"=> "verde",
                     "punto"=>  "23" ,
                     "material"=>  "vacuno" ,
                     "precio"=>  "130" ,
                     "stock_vendido"=> (2),
                     "total"=> "260" ,
                ),
            1=> array(
                     "id"=> "16" ,
                     "estilo"=> "0053" ,
                     "codigo"=> "4444444.25" ,
                     "color"=>  "verde" ,
                     "punto"=> "25" ,
                     "material"=> "vacuno" ,
                     "precio"=> "130" ,
                    "stock_vendido"=> (1) ,
                     "total"=>  "130" ,
                ),
            2=> array(
                     "id"=> "10" ,
                    "estilo"=>  "0058" ,
                     "codigo"=>"1232323.23" ,
                     "color"=> "rojo" ,
                     "punto"=>"23" ,
                     "material"=> "sintetico" ,
                     "precio"=>  "2.8" ,
                     "stock_vendido"=> (3) ,
                     "total"=>  "8.4" 
                 )
        );

at the moment of showing this arrangement in an HTML table with the help of a foreach it generates the table but it shows me 3 rows. Here the detail is that I only have to show 2 rows, since a style is repeated, however I must show those two rows but when the style is the same I must also show the shoe point I buy. Something similar to this, I did it in excel the way the table should look like in html:

IMAGE LINK

where description is only the style, and if there is more than one point of a style as it is added in its respective cell point of the shoe.

I hope you can help me friends, I would appreciate it a lot of friends.

So far I show the information of that arrangement, but as I mention it shows me 3 rows.

echo '<table style="font-size:8px; padding:5px 10px;">

    <td style="border: 0.1px solid #666; background-color:white; font-size:8px; width:78.14px; text-align:justify">Descripción</td>
    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">22</td>
    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">22.5</td>
            <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">23</td>
            <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">23.5</td>
            <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">24</td>
            <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">24.5</td>
            <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">25</td>
    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">25.5</td>
    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">26</td>
    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">26.5</td>
            <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">27</td>
            <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">27.5</td>
            <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">28</td>
            <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">28.5</td>
            <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">29</td>
    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">29.5</td>
    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">30</td>
    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">30.5</td>
            <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">31</td>
            <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">31.5</td>
            <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">32</td>

            ';
        foreach ($array85 as $val){
                $name = $val["estilo"] . '-' . $val["material"] . '-' . $val["color"];
                $punto = $val["punto"];

                if ($punto == "22") {
                    $stock22 = $val["stock_vendido"];

                } else if ($punto == "22.5") {
                    $stock225 = $val["stock_vendido"];

                } else if ($punto == "23") {
                    $stock23 = $val["stock_vendido"];

                } else if ($punto == "23.5") {
                    $stock235 = $val["stock_vendido"];

                } else if ($punto == "24") {
                    $stock24 = $val["stock_vendido"];

                } else if ($punto == "24.5") {
                    $stock245 = $val["stock_vendido"];

                } else if ($punto == "25") {
                    $stock25 = $val["stock_vendido"];

                } else if ($punto == "25.5") {
                    $stock255 = $val["stock_vendido"];

                } else if ($punto == "26") {
                    $stock26 = $val["stock_vendido"];

                } else if ($punto == "26.5") {
                    $stock265 = $val["stock_vendido"];

                } else if ($punto == "27") {
                    $stock27 = $val["stock_vendido"];

                } else if ($punto == "27.5") {
                    $stock275 = $val["stock_vendido"];

                } else if ($punto == "28") {
                    $stock28 = $val["stock_vendido"];

                } else if ($punto == "28.5") {
                    $stock285 = $val["stock_vendido"];

                } else if ($punto == "29") {
                    $stock29 = $val["stock_vendido"];

                } else if ($punto == "29.5") {
                    $stock295 = $val["stock_vendido"];

                } else if ($punto == "30") {
                    $stock30 = $val["stock_vendido"];

                } else if ($punto == "30.5") {
                    $stock305 = $val["stock_vendido"];

                } else if ($punto == "31") {
                    $stock31 = $val["stock_vendido"];

                } else if ($punto == "31.5") {
                    $stock315 = $val["stock_vendido"];

                } else if ($punto == "32") {
                    $stock32 = $val["stock_vendido"];

                }
                echo '<tr>



                    <td style="border: 0.1px solid #666; background-color:white; font-size:8px; width:78.14px; text-align:justify">'.$name.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">'.$stock22.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">'.$stock225.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">'.$stock23.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">'.$stock235.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">'.$stock24.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">'.$stock245.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">'.$stock25.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">'.$stock255.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">'.$stock26.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">'.$stock265.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">'.$stock27.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">'.$stock275.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">'.$stock28.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">'.$stock285.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">'.$stock29.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">'.$stock295.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">'.$stock30.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">'.$stock305.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">'.$stock31.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:34.14px; text-align:center">'.$stock315.'</td>
                    <td style="border: 0.1px solid #666; background-color:white; font-size:6px; width:30.14px; text-align:center">'.$stock32.'</td>



    </tr>
   ';
        }
        echo '</table>';

This is my attempt at solution but here I only count how many times the style is repeated, and I can not show the acquired units of each shoe size...

$datos = $array85;
        $array_tallajes = array();
        foreach ($datos as $item) {
            $value = $item["estilo"] . "-" . $item["material"] . "-" . $item["color"];
            $punto = $item["punto"];
            if (array_key_exists($value, $array_tallajes)) {
                if (array_key_exists($punto, $array_tallajes[$value])) {
                    $array_tallajes[$value][$punto] += 1;
                } else {
                    $array_tallajes[$value][$punto] = 1;
                }
            } else {
                $array_tallajes[$value] = [$punto => 1];
            }
        }

Assuming data is already aggregated and can't be any repeated combinations of 'estilo' and 'punto', a simple reindex of your array will do:

foreach($array85 as $el){
    $keys = ['stock_vendido', 'punto'];
    $size = array_filter($el, function($v, $k) use ($keys) { return in_array($k, $keys); }, ARRAY_FILTER_USE_BOTH);

   if (!isset($report[$el['estilo']])) {
      $shoe = array_filter($el, function($v, $k) use ($keys) { return !in_array($k, $keys); }, ARRAY_FILTER_USE_BOTH);
      unset($shoe['total']);
      $report[$el['estilo']] = $shoe;
      $report[$el['estilo']]['tallajes'] = [];
    } 
    $report[$el['estilo']]['tallajes'][$size['punto']] = $size['stock_vendido'];
}

Demo with HTML output and calculations.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM