/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Replace en tom streng
Fra : Arne Feldborg


Dato : 28-11-07 02:13


Måske er 'klappen' gået ned, eller måske kan jeg bare ikke se skoven for
træer.

Ihvertfald sidder jeg med et vistnok ret banalt problem: Hvordan
replacer man nemmest en tom streng (i et array) med en tekst.?

Denne her virker ihvertfald ikke:

$test = array('hallo_1','hallo_1','hallo_1','','hallo_1');
$test = str_replace('hallo_2','',$test);
print_r($test);

Derimod kan man jo sagtens kan replace en given tekst med en tom streng,
men ikke tilbage igen.?

--
mvh, A:\Feldborg

Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

 
 
Bertel Lund Hansen (28-11-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 28-11-07 05:39

Arne Feldborg skrev:

> Ihvertfald sidder jeg med et vistnok ret banalt problem: Hvordan
> replacer man nemmest en tom streng (i et array) med en tekst.?

En vilkårlig streng indeholder uendeligt mange tomme strenge.

> $test = array('hallo_1','hallo_1','hallo_1','','hallo_1');
> $test = str_replace('hallo_2','',$test);

foreach ($test as $nr => $element)
   if ($element)=='') $test[$nr]='hallo_2';

Tildeling til $element dur ikke. Det er kun en kopi. Derfor skal
$nr bruges.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Dan Storm (28-11-2007)
Kommentar
Fra : Dan Storm


Dato : 28-11-07 08:37

Bertel Lund Hansen skrev:
> Arne Feldborg skrev:
>
>> Ihvertfald sidder jeg med et vistnok ret banalt problem: Hvordan
>> replacer man nemmest en tom streng (i et array) med en tekst.?
>
> En vilkårlig streng indeholder uendeligt mange tomme strenge.

Hvad er det for noget sludder? Det bliver du nød til at uddybe...


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Bertel Lund Hansen (28-11-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 28-11-07 13:03

Dan Storm skrev:

> > En vilkårlig streng indeholder uendeligt mange tomme strenge.

> Hvad er det for noget sludder? Det bliver du nød til at uddybe...

$streng1='kanonføde';
$streng2=$streng1.'';
echo $streng2==$streng1;
$streng3=$streng1.''.'';
echo $streng3==$streng1;
osv.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Dan Storm (28-11-2007)
Kommentar
Fra : Dan Storm


Dato : 28-11-07 13:56

Bertel Lund Hansen skrev:
> Dan Storm skrev:
>
>>> En vilkårlig streng indeholder uendeligt mange tomme strenge.
>
>> Hvad er det for noget sludder? Det bliver du nød til at uddybe...
>
> $streng1='kanonføde';
> $streng2=$streng1.'';
> echo $streng2==$streng1;
> $streng3=$streng1.''.'';
> echo $streng3==$streng1;
> osv.
>

Hvad mener du ovenstående beviser/forklarer?
Du ændrer jo ikke på din streng ved at forsøge at tilføje ingenting? Du
tilføjer jo ikke en tom streng...

Det er jo logik for perlehøns at $streng2 == $string1 returnerer true,
for der er ikke sket nogen ændring ved strengen?



--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Bertel Lund Hansen (28-11-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 28-11-07 14:31

Dan Storm skrev:

> > $streng1='kanonføde';
> > $streng2=$streng1.'';
> > echo $streng2==$streng1;
> > $streng3=$streng1.''.'';
> > echo $streng3==$streng1;
> > osv.

> Hvad mener du ovenstående beviser/forklarer?

At en vilkårlig streng rummer uendeligt mange tomme strenge.

På samme måde kan man vilkårligt mange gange trække 0 fra et tal
uden at det ændrer værdi.

Pointen er at hvis man kunne erstatte den tomme streng med en
egentlig streng, så ville alle strenge svulme op og æde al den
tilgængelige hukommelse.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

David Trasbo (28-11-2007)
Kommentar
Fra : David Trasbo


Dato : 28-11-07 19:14

Bertel Lund Hansen skrev:

>> Hvad mener du ovenstående beviser/forklarer?
>
> At en vilkårlig streng rummer uendeligt mange tomme strenge.
>
> På samme måde kan man vilkårligt mange gange trække 0 fra et tal
> uden at det ændrer værdi.
>
> Pointen er at hvis man kunne erstatte den tomme streng med en
> egentlig streng, så ville alle strenge svulme op og æde al den
> tilgængelige hukommelse.

Aha, der fik jeg pointen. Det der enormt tekniske udtryk forstod jeg ikke
helt i starten.

Men det er selvfølgelig logisk nok.

--
David Trasbo.
http://lki.dk - Luk Kunderne Ind.



Dan Storm (29-11-2007)
Kommentar
Fra : Dan Storm


Dato : 29-11-07 07:10

David Trasbo skrev:
> Bertel Lund Hansen skrev:
>
>>> Hvad mener du ovenstående beviser/forklarer?
>> At en vilkårlig streng rummer uendeligt mange tomme strenge.
>>
>> På samme måde kan man vilkårligt mange gange trække 0 fra et tal
>> uden at det ændrer værdi.
>>
>> Pointen er at hvis man kunne erstatte den tomme streng med en
>> egentlig streng, så ville alle strenge svulme op og æde al den
>> tilgængelige hukommelse.
>
> Aha, der fik jeg pointen. Det der enormt tekniske udtryk forstod jeg ikke
> helt i starten.
>
> Men det er selvfølgelig logisk nok.
>

Det er da altid noget det giver mening for nogen...

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Dan Storm (29-11-2007)
Kommentar
Fra : Dan Storm


Dato : 29-11-07 07:13

Bertel Lund Hansen skrev:
> At en vilkårlig streng rummer uendeligt mange tomme strenge.
>
> På samme måde kan man vilkårligt mange gange trække 0 fra et tal
> uden at det ændrer værdi.
>
> Pointen er at hvis man kunne erstatte den tomme streng med en
> egentlig streng, så ville alle strenge svulme op og æde al den
> tilgængelige hukommelse.
>

Det er jo egentlig fuldstændigt irrelevant, idét at det slet ændrer
noget nogen steder at tilføje eller fjerne ingenting. Det er helt
forkert at 'strengen rummer uendeligt mange tomme strenge', for strengen
har jo en bestemt længde og det ændrer intet at tilføje/fjerne ingenting.

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Mads Jørgensen (28-11-2007)
Kommentar
Fra : Mads Jørgensen


Dato : 28-11-07 08:41

Bertel Lund Hansen skrev:
> Arne Feldborg skrev:
>
>> Ihvertfald sidder jeg med et vistnok ret banalt problem: Hvordan
>> replacer man nemmest en tom streng (i et array) med en tekst.?
>
> En vilkårlig streng indeholder uendeligt mange tomme strenge.
>
>> $test = array('hallo_1','hallo_1','hallo_1','','hallo_1');
>> $test = str_replace('hallo_2','',$test);
>
> foreach ($test as $nr => $element)
>    if ($element)=='') $test[$nr]='hallo_2';
>
> Tildeling til $element dur ikke. Det er kun en kopi. Derfor skal
> $nr bruges.
>
Altså, her må man lige pointere, at en vilkårlig streng ABSOLUT ikke
består af uendeligt mange tomme strenge!

Det du kan mene er, at et Array i teorien består af mange tomme
elementer, hvilket i teorien også er forkert.

Et array skal have defineret childs, altså under elementer. I
virkeligheden så har den jo kun det definerede indhold, og det ikke
definerede er IKKE en tom streng.

Anyways, så virker din foreach lykke til at løse problemet...

Dan Storm (28-11-2007)
Kommentar
Fra : Dan Storm


Dato : 28-11-07 08:44

Arne Feldborg skrev:
> Måske er 'klappen' gået ned, eller måske kan jeg bare ikke se skoven for
> træer.
>
> Ihvertfald sidder jeg med et vistnok ret banalt problem: Hvordan
> replacer man nemmest en tom streng (i et array) med en tekst.?
>
> Denne her virker ihvertfald ikke:
>
> $test = array('hallo_1','hallo_1','hallo_1','','hallo_1');
> $test = str_replace('hallo_2','',$test);
> print_r($test);

Årsagen til at det ikke virker er ganske simpelt at $test ikke er en
streng, men et array. str_replace() er en funktion du kun kan tilgå
strenge med.

Der er flere muligheder for at at gøre det du vel.
Den metode som Bertel viste og så kan du bruge array_filter()


function tomt_felt($var)
{
   if($var == "")
      return "hallo_2";
}

$test = array_filter($test, "tomt_felt");

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Arne Feldborg (28-11-2007)
Kommentar
Fra : Arne Feldborg


Dato : 28-11-07 11:26

Dan Storm <shadyz@_REMOVETHIS_err0r.dk> skrev Wed, 28 Nov 2007 08:43:56
+0100


>Årsagen til at det ikke virker er ganske simpelt at $test ikke er en
>streng, men et array. str_replace() er en funktion du kun kan tilgå
>strenge med.
>
Det er nu ikke helt rigtigt:

$test = array('hallo_1','hallo_2','hallo_3','','hallo_4');
$test = str_replace('hallo_2','HALLOooo',$test);
print_r($test);

Man kan også godt indsætte en tom streng i et array med str_replace(),
men man kan åbenbart ikke fjerne den igen.

<?php
echo '<pre>';
$test = array('hallo_1','hallo_2','hallo_3','hallo_4');
$test = str_replace('hallo_2','',$test);
print_r($test);

$test = str_replace('','Hallo_2',$test);
print_r($test);
echo '</pre>';

>Den metode som Bertel viste og så kan du bruge array_filter()
>
Ok tak for svarene. Det vil jeg arbejde videre med.

--
mvh, A:\Feldborg

Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

Dan Storm (28-11-2007)
Kommentar
Fra : Dan Storm


Dato : 28-11-07 11:38

Arne Feldborg skrev:
> Dan Storm <shadyz@_REMOVETHIS_err0r.dk> skrev Wed, 28 Nov 2007 08:43:56
> +0100
>
>
>> Årsagen til at det ikke virker er ganske simpelt at $test ikke er en
>> streng, men et array. str_replace() er en funktion du kun kan tilgå
>> strenge med.
>>
> Det er nu ikke helt rigtigt:

Der lærte jeg så også noget... Dog viser dit eksempel blot hvorfor man
ikke bør bruge streng-funktioner på et array.


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Arne Feldborg (28-11-2007)
Kommentar
Fra : Arne Feldborg


Dato : 28-11-07 12:42

Dan Storm <shadyz@_REMOVETHIS_err0r.dk> skrev Wed, 28 Nov 2007 11:38:15
+0100


>Der lærte jeg så også noget... Dog viser dit eksempel blot hvorfor man
>ikke bør bruge streng-funktioner på et array.
>
Det har du naturligvis ret i.

Men det er nu ikke det der er problemet i det her tilfælde. Det er den
tomme streng i sig selv der er problemet.

$test = 'peder';
echo '<br>1 '.$test;
$test = str_replace('peder','',$test);
echo '<br>2 '.$test;
$test = str_replace('','peder',$test);
echo '<br>3 '.$test;

Derfor var jeg på jagt efter om der fandtes en anden metode (uden at
skulle gennemløbe hele arrayet i en løkke). Men det gør der jo nok ikke.

--
mvh, A:\Feldborg

Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

Dan Storm (28-11-2007)
Kommentar
Fra : Dan Storm


Dato : 28-11-07 13:08

Arne Feldborg skrev:
> Men det er nu ikke det der er problemet i det her tilfælde. Det er den
> tomme streng i sig selv der er problemet.
>
> $test = 'peder';
> echo '<br>1 '.$test;
> $test = str_replace('peder','',$test);
> echo '<br>2 '.$test;
> $test = str_replace('','peder',$test);
> echo '<br>3 '.$test;

Problemet med ovenstående er netop
$test = str_replace('','peder',$test);
Du kan ikke lede efter '' for så leder den ikke efter noget. Der er ikke
noget mønster at lede efter. Den kan ikke ingenting.

> Derfor var jeg på jagt efter om der fandtes en anden metode (uden at
> skulle gennemløbe hele arrayet i en løkke). Men det gør der jo nok ikke.
>

Jo, array_filter();




--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Peter Brodersen (28-11-2007)
Kommentar
Fra : Peter Brodersen


Dato : 28-11-07 16:45

On Wed, 28 Nov 2007 13:07:31 +0100, Dan Storm
<shadyz@_REMOVETHIS_err0r.dk> wrote:

>$test = str_replace('','peder',$test);
>Du kan ikke lede efter '' for så leder den ikke efter noget. Der er ikke
>noget mønster at lede efter. Den kan ikke ingenting.

Det overordnede "problem" er, at str_replace() matcher et vilkårligt
sted inde i en streng.

Ønsket i den oprindelige post er, at der foretages to handlinger:
1. At sammenligne om match er lig med *hele* strengen
2. At erstatte den pågældende streng med en anden.

str_replace() honorerer ikke 1 (og det skal den heller ikke). Men hvis
der var tale om en funktion, der tjekkede hele strengen, ville der
ikke være noget i vejen for at have en sådan opførsel.

Så str_replace() er nok ikke den rigtige funktion at benytte i første
omgang. Det kan give uventede konflikter senere hen - en replace af
"peder" vil fx også replace "pedersen".


En replace af "" kunne principielt godt tilføje erstatningen mellem
hvert tegn. Andre funktioner opererer lidt skiftende her:

explode() og split() accepterer ikke en tom streng (explode()
returnerer FALSE og split() giver en warning)

Derimod, med preg_split kan man godt splitte på en tom streng (hvis
man ser bort fra delimiters). Her opdeles der i positionen mellem
hvert tegn.

--
- Peter Brodersen
Kendt fra Internet

Dan Storm (29-11-2007)
Kommentar
Fra : Dan Storm


Dato : 29-11-07 07:16

Peter Brodersen skrev:
> Det overordnede "problem" er, at str_replace() matcher et vilkårligt
> sted inde i en streng.
>
> Ønsket i den oprindelige post er, at der foretages to handlinger:
> 1. At sammenligne om match er lig med *hele* strengen
> 2. At erstatte den pågældende streng med en anden.
>
> str_replace() honorerer ikke 1 (og det skal den heller ikke). Men hvis
> der var tale om en funktion, der tjekkede hele strengen, ville der
> ikke være noget i vejen for at have en sådan opførsel.
>
> Så str_replace() er nok ikke den rigtige funktion at benytte i første
> omgang. Det kan give uventede konflikter senere hen - en replace af
> "peder" vil fx også replace "pedersen".
>
>
> En replace af "" kunne principielt godt tilføje erstatningen mellem
> hvert tegn. Andre funktioner opererer lidt skiftende her:
>
> explode() og split() accepterer ikke en tom streng (explode()
> returnerer FALSE og split() giver en warning)
>
> Derimod, med preg_split kan man godt splitte på en tom streng (hvis
> man ser bort fra delimiters). Her opdeles der i positionen mellem
> hvert tegn.
>

Lidt bedre teknisk gennemgang end det jeg skrev... :p

Troede nu ikke split() kunne nøjes med en warning og så fortsætte.

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste