Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Fasce di prezzo in base ad array

    Salve a tutti,

    sto creando un plugin per un'applicazione e-commerce, che mi permetta di filtrare i risultati di una ricerca in base a determinati valori. Sto incontrando una certa difficoltà per quanto riguarda il range dei prezzi. Vorrei ottenere sostanzialmente un output generato da un'array che contiene i prezzi dei prodotti presenti, ammettiamo sia questa.

    $pricelist = array(120, 59, 500, 80, 12);

    Ora, vorrei creare uno script che calcoli le varie fasce di prezzo possibili, ma basandosi solo sull'array, così che non mi crei, ad esempio 60-70, visto che non ci sono prodotti con un prezzo compreso fra quei due valori. Avevo pensato di utilizzare floor() e ceil() dividendo i numero per il loro esponente decimale, quindi rimoltiplicarli, ma non ricordo se esista in php una funzione che trasformi 50 in 5x10^1.

    Qualcuno saprebbe aiutarmi? Magari consigliandomi un metodo migliore?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    39
    Non ho capito bene cosa cerchi di fare, o meglio parzialmente ho capito quello che stai cercando di ottenere, puoi riformulare la richiesta ?

  3. #3
    function n($string, $se) {
    $a = strlen($string);
    $b = substr($string, $se, $a);
    $c = substr($string, $se-$se, $se);
    $str = $c . "x" . "1" . $b;
    return $str;
    }

    il primo numero passi il prezzo e nel secondo parametro la parte del numero diversa da 0
    passaci


    e.s.:

    echo(n("50", "1")); // stampa 5x1
    echo(n("3450000000000", "3")); // stampa 345x10000000000

  4. #4
    Originariamente inviato da Eddy0223
    Non ho capito bene cosa cerchi di fare, o meglio parzialmente ho capito quello che stai cercando di ottenere, puoi riformulare la richiesta ?
    Voglio ottenere questo

    prezzo:

    da 10 a 20
    da 50 a 100
    da 100 a 200
    da 300 a 400

    Partendo da
    array(12, 80, 92, 65, 122, 180, 340, 399)

    Naturalmente i valori devono essere variabili.

    @francescostella, grazie per il consiglio, provo e vi faccio sapere

  5. #5
    Per ora ho fatto così

    codice:
    						    	 /*     		Price                  */
    						    	 
    						$pricelist = array();
    						     foreach ($products as $product) {
    						     	$pricelist[] = $product['price'];						     	
    						     }
    						     
    						$price_ranges = array();
    						$done = 0;
    						foreach ($pricelist as $price) {
    
    							$base = pow(10, strlen(floor($price))-1);
    							$min = (int)(floor($price/$base)*$base);
    							$max = (int)(ceil($price/$base)*$base);
    							
    							if ($price >= 1 && $price < 1000) {
    								$max = $max == $min ? $min+$base : $max; // Ensurese there is no "20 to 20" like range
    							}
    							
    							if ($price >= 1000) { // Different approach for higher prices
    
    								$avg = ($min+$max)/2;
    								if ($price < $avg) {
    									$max = $avg;
    								} else {
    									$min = $avg;
    								}
    								$max = $max == $min ? $min+($base/2) : $max;							
    							}
    							
    							$range = $min .','.$max;
    							if (!array_key_exists($min, $price_ranges)) {
    								$price_ranges[$min]['from'] = $min;
    								$price_ranges[$min]['to'] = $max;
    								$price_ranges[$min]['count'] = 1;								
    							} else {
    								$price_ranges[$min]['count']++;
    							}
    							
    						} // End foreach pricelist

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.