Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  2 1694
Passordstøtte
Bill_Gates's Avatar
Hei!
Har dette arrayet her:

Kode

<?php
$valuta1 = "Bitcoin";
$valuta2 = "Etherum";
$valuta3 = "Litecoin";
$valuta4 = "Monero";
$valuta5 = "Ripple";


$BTC1 = 11137.24;
$BTC2 = 11090.05;
$BTC3 = 11407.05;

$ETH1 = 1055.17;
$ETH2 = 1105.17;
$ETH3 = 1246.01;

$LTC1 = 176.63;
$LTC2 = 180.89;
$LTC3 = 193.87;

$XMR1 = 323.69;
$XMR2 = 321.26;
$XMR3 = 332.17;

$XRP1 = 1.22;
$XRP2 = 1.22;
$XRP3 = 1.40;

$v2 = array(
    
    "BTC" => array(
        "navn" => "$valuta1",
        "k1" => "$BTC1",
        "k2" => "$BTC2",
        "k3" => "$BTC3"
    ),
    
    "ETH" => array(
        "navn" => "$valuta2",
        "k1" => "$ETH1",
        "k2" => "$ETH2",
        "k3" => "$ETH3"
    ),
    
    "LTC" => array(
        "navn" => "$valuta3",
        "k1" => "$LTC1",
        "k2" => "$LTC2",
        "k3" => "$LTC3"
    ),
    
    "XMR" => array(
        "navn" => "$valuta4",
        "k1" => "$XMR1",
        "k2" => "$XMR2",
        "k3" => "$XMR3"
    ),
    
    "XRP" => array(
        "navn" => "$valuta5",
        "k1" => "$XRP1",
        "k2" => "$XRP2",
        "k3" => "$XRP3"
    )
    
);

echo "<input id=sok name=sok type=text />";
echo "\t<input type=submit name=knapp_sok value='Søk' />\n";

if isset($_POST['knapp_sok'] {
$sokestreng = $_POST['sok'];
//noe vettugt for å søke gjennom etter strengmatch fra $sokestreng
}

Har prøvd med ulike foreach loop ispedd strpos. Men får bare blankt resultat.

Hvor skal jeg begynne.
Sist endret av Bill_Gates; 1. mars 2018 kl. 01:04.
Skjønner ikke helt hva du prøver å gjøre her. Kan du utdype litt?
▼ ... noen uker senere ... ▼
Limited edition
Moff's Avatar
Jeg tror at TS forsøker å lage en søkeboks som kan vise historisk kurs for ulike kryptovalutaer per kvartal. Jeg har ikke orket å sjekke om tallene stemmer, men det er jo egentlig ikke relevant. Jeg ville uansett ha strukturert dataene litt anderledes. Å ha egne variabler for hver valuta og hvert kvartal kommer til å bli slitsomt å vedlikeholde når du får inn mer data, så derfor er det lurt å putte ting inn i et array. Du bruker teknisk sett et array her, men du mater arrayet med data fra variabler som er definert på utsiden av en eller annen grunn. Dette virker unødvendig.

Kode

<?php

$currencies = array(
	array(
		'name'		=>	'Bitcoin',
		'code'		=>	'XBT',
		'keywords'	=>	'bitcoin btc xbt',
		'values'	=> array(
			'Q1'		=>	11137.24,
			'Q2'		=>	11090.05,
			'Q3'		=>	11407.05
		)
	),
	array(
		'name'		=>	'Ethereum',
		'code'		=>	'ETH',
		'keywords'	=>	'ethereum eth',
		'values'	=> array(
			'Q1'		=>	1055.17,
			'Q2'		=>	1105.17,
			'Q3'		=>	1246.01
		)
	),
	array(
		'name'		=>	'Litecoin',
		'code'		=>	'LTC',
		'keywords'	=>	'litecoin ltc',
		'values'	=> array(
			'Q1'		=>	176.63,
			'Q2'		=>	180.89,
			'Q3'		=>	193.87
		)
	),
	array(
		'name'		=>	'Monero',
		'code'		=>	'XMR',
		'keywords'	=>	'monero xmr',
		'values'	=> array(
			'Q1'		=>	323.69,
			'Q2'		=>	321.26,
			'Q3'		=>	332.17
		)
	),
	array(
		'name'		=>	'Ripple',
		'code'		=>	'XRP',
		'keywords'	=>	'ripple xrp',
		'values'	=> array(
			'Q1'		=>	1.22,
			'Q2'		=>	1.22,
			'Q3'		=>	1.40
		)
	)
);

?>

<form action="?" method="post">
	<input type="text" name="query" placeholder="Valuta" />
	<input type="submit" name="submit" value="Søk" />
</form>

<?php

if(isset($_POST['query'])) {
	$result = 'Ingen resultater. Prøv å søke på noe annet.';
	
	foreach($currencies as $c) {
		if(stripos($c['keywords'], trim($_POST['query'])) !== false) {
			$result = $c['name'] . ' (' . $c['code'] . ')<br>';
			
			foreach($c['values'] as $k => $v) {
				$result .= $k . ' - ' . $v . '<br>';
			}
			
			break;
		}
	}
	
	echo $result;
}

?>
I dette eksempelet så har jeg all data i array $currencies. Dette arrayet har 3 nivåer. Det første nivået er en liste med ulike valutaer. Disse har ikke nøkler (det er altså ikke et associative array). Hver valuta har et navn, en kode, en streng som heter "keywords" som brukes i søk, og et array kalt values. Values er en liste med tallverdier, og her kan du legge til mer data etter hvert som det kommer inn.

Den nederste biten av koden er selve søkemekanismen. Den sjekker om $_POST['query'] er satt, og prøver å finne ut som en av keywords-strengene inneholder den frasen man har søkt etter. Om du søker etter "coin" så vil den altså finne Bitcoin ("bitcoin btc xbt"). Om det ikke var for "break"-statementen så ville den har funnet Litecoin i stedet, ettersom dette også er en match. Break gjør at koden hopper ut av den nærmeste løkken man er i, som i dette tilfellet er foreach($currencies as $c). stripos() er en fin metode for å finne strenger inne i andre strenger, og den er case-insensitiv. Jeg må bruke !== fordi stripos kan returnere både 0 og false, og hvis du bare skriver != så ville både 0 og false tolkes som samme resultat. Med !== så tolkes 0 og false ulikt. Dette er standard i de fleste programmeringsspråk. Jeg har også lagt inn en trim() på søkefrasen, fordi det er god programmeringsskikk. Når du har en søkeboks så er det ofte sånn at folk copy-paster ting inn for å søke, og når man kopierer tekst fra word-dokumenter eller nettsider så får du ofte med ekstra padding (mellomrom, tabs og slike ting). trim() spiser opp alle slike ting foran og bak en streng.

Jeg kan også nevne at jeg bruker to ulike typer foreach-løkker her. foreach($currencies as $c) går gjennom hvert element i $currencies og gjør nåværende element tilgjengelig i variabelen $c. Lengre nede har jeg en løkke for values; foreach($c['values'] as $k => $v). Dette er det samme, men den tilgjengeliggjør også nøkkelen til elementet i $k, i tillegg til verdien til elementet i $v. Dette er et nyttig triks for associative arrays, fordi du kan bruke det som labels ("Q1", "Q2" og så videre).
Sist endret av Moff; 16. mars 2018 kl. 17:42.