Gå til innhold

Trenger hjelp til script - pris fra prisliste


Anbefalte innlegg

Driver og pusler med noen PHP script for å regne ut pris på telefonsamtaler utifra en prisliste..

 

Planen er å kjøre følgende kommando og få frem totalpris på en samtale (ringetid + oppstart):

 

price.php 0056966546565 342 og få opp for eks 3484 eller 34,84 (kroner)

(price.php telefonnummer sekunder)

 

prislisten har linjer som dette:

11[0123],0,0

115,0,59

12[02569],0,59

13[04567],0,59

[123567].......,9,20

[49].......,130,31

0056.........,560,59

osv...

 

Dette er da telefunnummer , minuttpris , startpris.. Dette er vel "rett format" for å lett lese fra script?

 

Noen som har URL til noe "helt" likt eller som kjapt klarer å spikre sammen denne koden? Bør stoppe på første match i prislisten.

 

På forhånd takk!!

Lenke til kommentar
Videoannonse
Annonse

Jeg gjør dessverre ikke jobben for andre som ikke har prøvd, men du vil antakelig prøve følgende funksjoner/konstruksjoner (i kronologisk rekkefølge):

http://www.php.net/file

http://www.php.net/foreach

http://www.php.net/explode

 

Dersom du er vågal kan

http://www.php.net/file_get_contents

http://www.php.net/preg_match

være et raskere alternativ, dog teknisk vanskeligere

Endret av Peter
Lenke til kommentar

Jeg har prøvd MYE selv (MANGE timer), men sliter med dette. Om du søker litt på mitt brukernavn så vil du se at jeg IKKE er en av de som bare "krever" hjelp av andre, men heller bruker mye tid på å hjelpe andre..

 

Jeg sliter med hvordan jeg kan "tråkle" meg gjennom listen etter treff.. Så kode som hjelper meg på vei i hvert fall hadde vært flott.

Lenke til kommentar
http://www.php.net/file <- leser inn filen i et array

http://www.php.net/foreach <- går igjennom èn og èn linje i filen

http://www.php.net/explode <- del opp linjen på komma, og sjekk første verdi mot telefonnummeret.

 

Takk for linker. Har lest dette. Finner ikke noe som forklarer meg hvordan jeg kan input'e et tall 91234567 og se om jeg får treff i en tabell eller en kolonne i en fil.. for eks i et "sh-script" så har jeg et treff med linjen (i prisfilen) [49].......

 

Er ikke lett for noen som ikke har så mye erfaring med PHP og tankegang..

Et SH-script jeg har laget for et par år siden eller noe slikt stråkler gjennom en csv-fil og summerer kostnader for et utgående nummer.. Men denne gangen vil jeg bare "sende inn" et tall og søke etter et treff i prislisten.. og når jeg finner et treff så vil jeg ha to tall fra dette treffet (startpris og pris pr minutt).

Adresse til mitt sh-sctipt er: http://www.tech-support.no/asterisk/count/count.zip

Lenke til kommentar

$arr = explode( ',', $line ); <- vil gi deg et array, eller liste om du vil med tre elementer:

$arr[0] <- telefonnummer

$arr[1] <- minuttpris

$arr[2] <- oppstartspris

 

Så kan du bare sjekke om $argv[1] == $arr[0] der $argv[1] er telefonnummer

altså:

 

  $con = file('myfile.txt');
 foreach( $con as $line )
 {
$arr = explode( ',', $line );
if( $arr[0] == $argv[1] )
{
  // her har vi funnet linjen med matchende telefonnummer...
  // altså kan du begynne å regne ut prisen på $argv[2] (sekunder) her med $arr[1] (minuttpris) og $arr[2] (oppstartsprisen)
}
 }

Lenke til kommentar
$arr = explode( ',', $line ); <- vil gi deg et array, eller liste om du vil med tre elementer:

$arr[0] <- telefonnummer

$arr[1] <- minuttpris

$arr[2] <- oppstartspris

 

Så kan du bare sjekke om $argv[1] == $arr[0] der $argv[1] er telefonnummer

altså:

 

  $con = file('myfile.txt');
 foreach( $con as $line )
 {
$arr = explode( ',', $line );
if( $arr[0] == $argv[1] )
{
  // her har vi funnet linjen med matchende telefonnummer...
  // altså kan du begynne å regne ut prisen på $argv[2] (sekunder) her med $arr[1] (minuttpris) og $arr[2] (oppstartsprisen)
}
 }

 

Takker veldig mye! DETTE var til hjelp! :)

Lenke til kommentar

hmm..

 

Har kommet frem til DETTE nå (utregningene er på mange flere linjer enn nødvendig, men jeg gjorde det slik for å ha bedre kontroll)

 

<?php
 $con = file('prices.csv');
 foreach( $con as $line )
 {
   $arr = explode( ',', $line );
   if( $arr[0] == $argv[1] )
   {
     $rate = $arr[1];
     $start = $arr[2];
     $minutter = $argv[2] / 60;
     $sumtotal = $start + $minutter * $rate;
     $sumkroner = $sumtotal / 100;
     print $sumkroner;
   }
 }
?>

 

Dette fungerer nå veldig bra mot EKSAKTE treff i prislisten.. MEN jeg skulle gjerne søkt etter "regular expressions" som jeg gjorde i det sh-scriptet. for eks så vil [49]....... treffe nummere med 8 siffere som begynner på 4 og 9.. 0056[56]........ vil treffe nummere i Chile som begynner på (0056)5 og (0056)6 med 8 siffere bak..

Er det lett å få til dette? Eller er det annet format på regular expressions i php?

Endret av lohelle
Lenke til kommentar

Forresten..

 

I prislisten min har jeg for eks følgende linjer..:

 

[123567].......,9,20

[49].......,130,100

[0-9][0-9][0-9][0-9][0-9],39,59

[0-9][0-9][0-9][0-9],0,0

 

Problemet er at jeg får match på telefonnummere med 8 siffere også

 

første linje vil jeg ha treff på nummere som starter med alle tall unntatt 4, 8 og 9 OG som har 8 siffere..

andre linje vil jeg ha treff på nummere med 8 siffere og som starter med 4 eller 9

tredje linje vil jeg ha treff på alle nummere med nøyaktig 5 siffere

fjerde linje vil jeg ha treff på alle nummere med nøyaktig 4 siffere..

 

Hvordan spesifiserer jeg disse "ønskene" ? Har prøvd litt og lest litt, men får det ikke helt til.. :\

Lenke til kommentar

Fant ut selv til slutt.. Jeg måtte legge til ^ fremst og $ bakerst i [49]....... for eks.. slik at det blir ^[49].......$

Dvs starter med 4 eller 9 og slutter med 7 tall/tegn, og da blir det nøyaktig 8 totalt.. Legger til dette i scriptet, så slipper jeg å endre på prices.csv

Lenke til kommentar
første linje vil jeg ha treff på nummere som starter med alle tall unntatt 4, 8 og 9 OG som har 8 siffere..

andre linje vil jeg ha treff på nummere med 8 siffere og som starter med 4 eller 9

tredje linje vil jeg ha treff på alle nummere med nøyaktig 5 siffere

fjerde linje vil jeg ha treff på alle nummere med nøyaktig 4 siffere..

 

Hvordan spesifiserer jeg disse "ønskene" ? Har prøvd litt og lest litt, men får det ikke helt til.. :\

  • (^[0123567][0-9]{7}$)
  • (^[49][0-9]{7}$)
  • (^[0-9]{5}$)
  • (^[0-9]{4}$)

elns

Endret av Peter
Lenke til kommentar
første linje vil jeg ha treff på nummere som starter med alle tall unntatt 4, 8 og 9 OG som har 8 siffere..

andre linje vil jeg ha treff på nummere med 8 siffere og som starter med 4 eller 9

tredje linje vil jeg ha treff på alle nummere med nøyaktig 5 siffere

fjerde linje vil jeg ha treff på alle nummere med nøyaktig 4 siffere..

 

Hvordan spesifiserer jeg disse "ønskene" ? Har prøvd litt og lest litt, men får det ikke helt til.. :\

  • (^[0123567][0-9]{7}$)
  • (^[49][0-9]{7}$)
  • (^[0-9]{5}$)
  • (^[0-9]{4}$)

elns

 

Jepp. Fikk som sagt til. Fungerte de jeg hadde i filen fra før også bare ved å sette ^ fremst og $ bakerst. :)

Lenke til kommentar

Her er forresten hele scriptet jeg holder på med nå.

Har et script på Asterisk serveren som legger inn div data i en SQL database. Det siste jeg har styrt med er for å "rate" samtalene.

 

Det eneste "problemet" nå er kanskje at på den måten jeg gjør ting nå så er det vanskelig å gruppere etter dato og nummer med totalt forbruk osv.. Men skal nok få til noe. :)

 

<?php
// Make a MySQL Connection
mysql_connect("localhost", "root", "password") or die(mysql_error());
mysql_select_db("database") or die(mysql_error());

$result = mysql_query("SELECT * FROM cflow")
or die(mysql_error());

echo "<table border='1'>";
echo "<tr> <th>Fra</th> <th>Til</th><th>Tid</th><th>Dato</th><th>Start</th><th>Pris</th></tr>";
// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {

 $con = file('prices.csv');
 foreach( $con as $line )
 {
   $arr = explode( ',', $line );
   $til = $row['til'];
   $tid = $row['tid'];
   if (preg_match("/^$arr[0]$/", $til))
   {
     $rate = $arr[1];
     $start = $arr[2];
     $minutter = $tid / 60;
     $sumtotal = $start + $minutter * $rate;
     $sumkroner = $sumtotal / 100;
     $sumrounded = round($sumkroner, 2);
   }
 }

       echo "<tr><td>";
       echo $row['fra'];
       echo "</td><td>";
       echo $row['til'];
       echo "</td><td>";
       echo $row['tid'];
       echo "</td><td>";
       echo $row['dato'];
       echo "</td><td>";
       echo $row['start'];
       echo "</td><td>";
       echo $sumrounded;
       echo "</td></tr>";
       $sumrounded = "";
}

echo "</table>";
echo "<br>";
echo "<a href=groupcflow.php>Summert pr telefonnummer</a>"
?>

Lenke til kommentar

Legger dette i en ny post for å holde det mest mulig ryddig..

 

Nå looper jeg gjennom alle radene i en array hentet fra en tabell i en SQL database (eller noe slikt) og regner ut kostnad på samtalene utifra en csv-fil som inneholder minutt- og startpris. Dette fungerer egentlig bra.

 

Det som er litt dumt nå er at det er vanskelig å sortere og gruppere resultatet..

Er det en enkel måte jeg kan "sende" verdiene til et nytt array etter hvert som jeg looper gjennom det første.. slik at til slutt har jeg et helt likt array som det første, men en ekstra kolonne bakerst.. Da er det vel litt lettere å sortere, gruppere og summere.. Jeg kunne selvsagt gå via en fil på disken, men det er vel ikke akkurat den "peneste" måten å gjøre det på...

 

Har lest litt på dette, men de fleste eksempler jeg finner har ikke mange kolonner og scriptet har ikke loop osv..

 

Tips?? :)

Endret av lohelle
Lenke til kommentar
$myArr = array();
for( $i=0;$i<10;$i++ )
{
$myArr[] = $i;
}

// Nå vil myArr ha 10 elementer, tallene 0-9.

 

Hmm.. takk! :)

 

Litt usikker på hvordan jeg implementerer dette i mitt script.. siden jeg har mer noe slikt som dette..

 

fra , til , tid , dato , start , kost

xxx, xxx, xxx, xxx, xxx, xxx

xxx, xxx, xxx, xxx, xxx, xxx

xxx, xxx, xxx, xxx, xxx, xxx

 

og ikke bare

xxx

xxx

xxx

 

Sorry om jeg er litt på jordet.. :)

Endret av lohelle
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...