Pereiti prie turinio

Pagalbos su algoritmu


Rekomenduojami pranešimai

Sveiki, kažkur padariau klaidą ir man algoritmas nedirba, taip kaip turėtų.

 

Yra toks masyvas1[]:

id | price | name

1 | 5 | maxima

2 | 10 | rimi

3 | 7 | iki

4 | 20 | maxima

5 | 1 | maxima

 

Man reikia atrinkti unikalius tiekejus ir paimti tik didžiausią tiekėjo kainą.

 

Taigi masyvas1[] yra suduomenim. Masyvas2[] bus su atrinktais tiekejais.

 

Aš pradedu sukti masyvas1. Kadangi masyvas2[] dar neegzistuoja, aš įrašau pirmo ciklo duomenis į masyvas2. Tomiau vel sukasi masyvas1. Kadangi masyvas2 jau egzistuoja tai tikrinau ar masyvas1[name] yra lygu masyvas2[name]. Jeigu nelygu, tai i masyvas2 irasau duomenis. O jeigu lygu, tai tikrinu ar masyvas2[price] yra maziau uz masyvas1[price]. Jeigu masyvas2 yra mazesne reiksme, tuomet ant viršaus užrašau naujas reikšmes.

 

Bet deja, jis man išveda pasikartojančius duomenis. Kažką darau netaip.

 

Kodo pavizdys:

                   foreach ($results as $result) {
                       $i++;
                       if (is_array($shipping_array)) {
                       foreach ($shipping_array as $key => $value) {
                           if ($value['name'] == $result['name']) { 
                               if ($value['price'] < $result['price']) {
                                   $shipping_array[$key]['price'] = $result['price'];
                                   $shipping_array[$key]['send_id'] = $result['send_id'];
                                   $shipping_array[$key]['name'] = $result['name'];
                               }
                           } else {
                               $shipping_array[$i]['price'] = $result['price'];
                               $shipping_array[$i]['send_id'] = $result['send_id'];
                               $shipping_array[$i]['name'] = $result['name'];
                           }
                       }


                       } else {
                       $shipping_array[$i]['price'] = $result['price'];
                       $shipping_array[$i]['send_id'] = $result['send_id'];
                       $shipping_array[$i]['name'] = $result['name'];
                       }


                   }

 

Kur galėtų būti klaida?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Gali pabandyti naudoti truputį paprastesnį būdą:

$unique = array();

foreach($full as $item) {
if (array_key_exists($item['name'], $unique)) {
	if ($item['price'] > $unique[$item['name']]) {
		$unique[$item['name']] = $item['price'];
	}
} else {
	$unique[$item['name']] = $item['price'];
}
}

 

Rezultatas (jeigu nėra būtina grąžinti asociatyvaus masyvo):

 

Array
(
   [maxima] => 20
   [rimi] => 10
   [iki] => 7
)

 

Asociatyvaus masyvos grąžinimas:

 

$unique = array();
$new = true;

foreach($full as $item) {
if (!empty($unique)) {
	foreach($unique as $uniqueItemKey => $uniqueItemKeyValue) {
		if ($item['name'] == $uniqueItemKeyValue['name']) {
			if ($item['price'] > $uniqueItemKeyValue['price']) {
				$unique[$uniqueItemKey]['price'] = $item['price'];
			}
			$new = false;
			break;
		}
	}
}
if ($new) {
	$newUniqueItem['name'] = $item['name'];
	$newUniqueItem['price'] = $item['price'];
	array_push($unique, $newUniqueItem);
}
}

 

Rezultatas:

 

Array
(
   [0] => Array
       (
           [name] => maxima
           [price] => 20
       )

   [1] => Array
       (
           [name] => rimi
           [price] => 10
       )

   [2] => Array
       (
           [name] => iki
           [price] => 7
       )

)

Redagavo beniens
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...