webForumDet fria alternativet

Någon kanske skulle kunna hjälpa mig med detta

PHP

7 svar · 339 visningar · startad av vic

Medlem sedan apr. 2006244 inlägg
Frågan#1

Strängarna ser ut nått sånt här:

testa<,Tamburin,Violin,,,,,,|rasss<,Tamburin,Violin,,,,,,|

De skall sedan exploderas med först | och sedan med > för att slutligen exploderas med , Det ser alltså ut så här:

 NAMN < instrument , instrument , instrument | NAMN < instrument , instrument

Jag skulle dock behöva ta bort alla dom kommatecken som inte står före ett instrument. Jag antar att det funkar med nått str_replace eller preg_replace men vad är det jag skall ta bort? Om jag kör med str_replace(',,', '', $string) så finns ju risken att det tas bort kommatecken mellan två instrument om dom inte är direkt efter varandra

Om någon skulle vilja ta sig tid vore jag oerhört tacksam.
// Vic

Medlem sedan aug. 20039 340 inlägg
#2
<pre><?PHP

$instruments = 'testa<,Tamburin,Violin,,,,,,|rasss<,Tamburin,Violin,,,,,,|';
$instruments = preg_replace('/\|$/', '', $instruments);
$instrarray = explode('|', $instruments);

$instrarray2=Array();

foreach ($instrarray as $i ){
        $split=explode('<', $i);
        $instrarray2[$split[0]]=preg_split('/,+/', $split[1], -1, PREG_SPLIT_NO\
_EMPTY);
}
// Skriv ut arrayen:
print_r($instrarray2);

echo '<br /><br />';
echo $instrarray2['testa'][1]; // Ska skriva ut violin

?></pre>

There we go! Detta är min experimentkod, hoppas det är någorlunda vad du hade tänkt dig.

Medlem sedan apr. 2006244 inlägg
#3

Jisses de ser fint ut :) Kan tyvärr inte testa det från datorn jag nu sitter vid.

Det enda jag dock behöver är något som tar bort de kommatecken som inte föregås av ett instrumment. Efter det kommer strängen att sparas i databasen.

Medlem sedan aug. 20039 340 inlägg
#4

Jaha, då missförstod jag. Du vill alltså ha en funktion som tar det som står i den övre rutan och returnerar det som står i den undre?

Medlem sedan apr. 2006244 inlägg
#5

Om du syftar på kodrutorna i mitt första inlägg så är svaret: JA :)

Medlem sedan aug. 20039 340 inlägg
#6

kod<pre><?PHP

$instruments = 'testa<,Tamburin,Violin,,,,,,|rasss<,Tamburin,Violin,,,,,,|';
$instruments = preg_split('/\|/', $instruments, -1, PREG_SPLIT_NO_EMPTY);
foreach($instruments as $k => $v){
$split=explode('<', $v);
$split[1]=implode(" , ", preg_split('/,+/', $split[1], -1, PREG_SPLIT_NO_EMPTY));
$instruments[$k]=$split[0] . " < " . $split[1];
}
$instruments=implode(" | ", $instruments);
print_r($instruments);
?>[kod]Nu har jag dock tagit dig på orden, så koden accepterar inga mellanslag i indata. (Då blir det inte som tänkt)

Medlem sedan dec. 20025 483 inlägg
#7

Eller

$str = preg_replace('/,(?=[^\w])/','',$str);

om $str är strängen i fråga.

Medlem sedan apr. 2006244 inlägg
#8

Utmärkt grabbar (y)

378 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
244 ms — ändringar (db)