0

This is my first question, so I will start with a useless bit. I want to say thank you, I've been a stack overflow lurker for a while now and a lot of contributors on different questions in jQuery and PHP have helped me without even knowing that they hepled me, so I want to start with a thank you to every contributor on stack overflow.

Currently I'm trying to program a simple compare tool for a website. In Holland people can pick there own electrical company that should supply them with power/gas. Because of the price difference people will try to find one that is the cheapest for them.

I'm combining a PHP array and using a 'for each' to produce HTML content. The array looks something like this:

<?php
$leverancierarray = array(
// Iedere array hieronder is één leverancier.
  array (
    'leverancier' => 'Nuon',
    'korting_tekst' => '100 euro korting',
    'korting_value' => 100,
    'contract_duur' => '12 maanden', // Aantal maanden in tekst
    'contract_duur_value' => 12, // Aantal maanden
    'tarief_enkel_stroom' => 0.18, // In cent ipv euro's. Makkelijker om de komma te berekenen
    'tarief_dubbel_stroom' => 0.21, // In cent ipv euro's. Makkelijker om de komma te berekenen 
    'tarief_piek_stroom' => 0.21, // In cent ipv euro's. Makkelijker om de komma te berekenen       
    'tarief_gas' => 0.60, // In cent ipv euro's. Makkelijker om de komma te berekenen
    'tarief_vastrecht_stroom' => 1.05, // In euro's.
    'tarief_vastrecht_gas' => 1.05, // In euro's.   
    'tarief_transport_stroom' => 350, // In euro's.
    'tarief_transport_gas' => 124, // In euro's.
    'heffingskorting' => 347, // heffingskorting.
  ),
  array (
    'leverancier' => 'Qurrent',
    'korting_tekst' => '100 euro korting',
    'korting_value' => 75,
    'contract_duur' => '12 maanden', // In tekst
    'contract_duur_value' => 12, // Aantal maanden
    'tarief_enkel_stroom' => 0.19, // In cent ipv euro's. Makkelijker om de komma te berekenen
    'tarief_dubbel_stroom' => 0.21, // In cent ipv euro's. Makkelijker om de komma te berekenen 
    'tarief_piek_stroom' => 0.21, // In cent ipv euro's. Makkelijker om de komma te berekenen       
    'tarief_gas' => 0.58, // In cent ipv euro's. Makkelijker om de komma te berekenen
    'tarief_vastrecht_stroom' => 5.75, // In euro's.
    'tarief_vastrecht_gas' => 5.75, // In euro's.   
    'tarief_transport_stroom' => 350, // In euro's.
    'tarief_transport_gas' => 124, // In euro's.
    'heffingskorting' => 347, // heffingskorting.
  ),
    array (
    'leverancier' => 'Oxxio',
    'korting_tekst' => '100 euro korting',
    'korting_value' => 80,
    'contract_duur' => '12 maanden', // Aantal maanden in tekst
    'contract_duur_value' => 12, // Aantal maanden
    'tarief_enkel_stroom' => 0.20, // In cent ipv euro's. Makkelijker om de komma te berekenen
    'tarief_dubbel_stroom' => 0.21, // In cent ipv euro's. Makkelijker om de komma te berekenen 
    'tarief_piek_stroom' => 0.21, // In cent ipv euro's. Makkelijker om de komma te berekenen       
    'tarief_gas' => 0.58, // In cent ipv euro's. Makkelijker om de komma te berekenen
    'tarief_vastrecht_stroom' => 3.75, // In euro's.
    'tarief_vastrecht_gas' => 3.75, // In euro's.   
    'tarief_transport_stroom' => 350, // In euro's.
    'tarief_transport_gas' => 124, // In euro's.
    'heffingskorting' => 347, // heffingskorting.
  ),
);

?>

While part of the page looks like this (Using Joomla CMS):

<div class="leverancier-container vergelijkbox" id="box-one">


<?php
  foreach ($leverancierarray as $leverancierrow) {
    $lowerleverancier = strtolower($leverancierrow['leverancier']);
    $displayleverancier = ucwords($leverancierrow['leverancier']);

    $totaal_stroom_kosten = (($leverancierrow['tarief_enkel_stroom']*3500)+($leverancierrow['tarief_vastrecht_stroom']*12));
    $totaal_gas_kosten = (($leverancierrow['tarief_gas']*1600)+($leverancierrow['tarief_vastrecht_gas']*12));
    $transport_kosten = ($leverancierrow['tarief_transport_stroom']+$leverancierrow['tarief_transport_gas']);
    $heffingskorting = $leverancierrow['heffingskorting'];
    $totaal_transport_kosten = ($transport_kosten-$heffingskorting);
    $korting = $leverancierrow['korting_value'];

    $jaarbedrag = ($totaal_stroom_kosten+$totaal_gas_kosten+$totaal_transport_kosten);
    $totaal_jaarbedrag = str_replace('.',',',round(($jaarbedrag-$korting),0));

    $maandbedrag = str_replace('.',',',round(($totaal_jaarbedrag/12),0)); 



  echo '<div data-sort="'.$maandbedrag.'" class="leverancier-box" id="'.$lowerleverancier.'">
            <div class="leverancier-logo">
                <div><a href="/aanbieder/'.$lowerleverancier.'" target="_blank" rel="nofollow"><span class="logo_'.$lowerleverancier.'"></span></a></div>
            </div>

            <div class="leverancier-contract">
                <div>
                    <h3>Contract</h3>
                </div>
                <div class="leverancier-voorwaarden">
                    <div>Duur: <span>'.$leverancierrow['contract_duur'].'</span></div>
                    <div>Actie: <span>'.$leverancierrow['korting_tekst'].'</span></div>         
                </div>

                <div>
                    <div><a href="#">Bekijk de tarieven.</a></div>
                </div>
            </div>

            <div class="leverancier-prijs">
                <div>
                    <h3>Gemiddelde prijs</h3>
                </div>
                <div class="leverancier-voorwaarden">
                    <div class="prijs_div_homepage"><span class="prijs_groot_homepage">€ '.$maandbedrag.'</span> per maand</div>    
                </div>

                <div>
                    <div><span>€ '.$totaal_jaarbedrag.'</span> per jaar</div>                       
                </div>
            </div>

            <div class="leverancier-bestellen">
                <div>
                    <div><a href="/aanbieder/'.$lowerleverancier.'" target="_blank" rel="nofollow"><span class="knop_3">Overstappen</span></a></div>
                    <div><a href="#">Meer informatie</a></div>          
                </div>
            </div>
        </div>';
  }
?> 

</div>

The for each will create 3 separate 'leverancier-box' divs that contain information from the array. I'm trying to make this as easy as possible for colleague's that will update the prices. They only have to change the 'tarief_enkel_stroom' etc so that the $maandbedrag value will update. Because the third provider in the array can be cheaper, I'm trying with jQuery to sort the divs based on the value of $maandbedrag.

I tried to sort the divs with data-sort="'.$maandbedrag.'" in the parent element. I tried to use this question as a reference but I could not make it work. I also tried to use this method, however I do not understand the code completely of both methods and I believe that is the biggest problem for solving this riddle.

Once again thank you looking at this problem, I hope someone can enlighten me on how I can solve the problem I'm facing.

PS: I presumed jQuery was the best approach to sort the 3 divs based on the value of $maandbedrag.

Kind regards,

Kevin.

Edit:

I've solved the problem using jQuery. I used this topic as guide.

Community
  • 1
  • 1
Kevin Mol
  • 1
  • 1
  • I see you have got your data in an array. Will this be the real source of data when this goes live? In a solution like this I expect it will come from the database in reality? If that's the case, you can just use SQL to sort the data by the required value before it gets anywhere near your UI. – ADyson Sep 15 '16 at 14:52
  • Yes, the data will come from this array. We've picked this because the colleague's that will enter the data have no programming skills. Opening the .php file from filezilla and editing it is faster (i think). – Kevin Mol Sep 15 '16 at 15:26
  • I don't quite understand. How does using an array instead of a database help people with no programming skills? The user interface is there to help them view and enter the data. How you (as a programmer) choose store and retrieve the data makes no direct difference to them. – ADyson Sep 15 '16 at 16:11
  • Can you simplify your problem? We probably don’t need all this data to reproduce your problem / answer your question, right? – Kissaki Sep 21 '16 at 15:56
  • Thank you for the reply, I've solved the problem using jQuery. While not optimal it does the trick. I'm unsure how I can close the question. – Kevin Mol Sep 22 '16 at 10:05

0 Answers0