« 1 2 »
Autor Zpráva
Yuff.3
Profil
Ahojte,
chcem z hodnoty odstrániť (napr. mám "+4+7+9-5-3-1+15+-47+65+-87+24-62") - no a chcem dostať len čísla - ako mám postupovať? Akú funkciu použiť?
Ďakujem.
juriad
Profil
Nejspíš nějak takto. Nevím ale, jak se chceš chovat k záporným číslům. Teď zachovávám znaménko mínus, jen když před ním je ještě +.
$x = "+4+7+9-5-3-1+15+-47+65+-87+24-62";
var_dump(preg_split('/\+|(?<!\+)-/', $x, -1, PREG_SPLIT_NO_EMPTY));
Yuff.3
Profil
Nie, nie..
chcel som odstrániť všetky znamienka, tak, aby mi zostali čísla - následne z čísel spravím ID jednotlivých členov, ktoré aj predstavujú.
juriad
Profil
Takže chceš toto? Tedy odstranit plusy a mínusy a převést na pole?
var_dump(preg_split('/[+-]+/', $x, -1, PREG_SPLIT_NO_EMPTY));

Pokud ne, tak mi vůbec není jasné, co chceš. Zkus napsat, co má být výsledkem toho příkladu, který jsi napsal.
Yuff.3
Profil
Výsledok má byť: 4 7 9 5 3 1 15 47 65 87 24 62 :)
čiže len samotné čísla :)
juriad
Profil
V tom případě takto:
echo trim(preg_replace('/[+-]+/', ' ', $x));
Ale stejně to pak asi budeš chtít převést na pole.
Yuff.3
Profil
Jak previesť na pole?
Chcem, aby tie jednotlivé čísla boli v premennej a oddelene .. Každé číslo samostatne v premennej, ale v jednej premennej, ako keď použijem funkciu "for" napr.
lionel messi
Profil
Yuff.3:
Chcem, aby tie jednotlivé čísla boli v premennej a oddelene ..
Nepomôže niečo podobné?

<?php
$cisla = "+4+7+9-5-3-1+15+-47+65+-87+24-62";
preg_match_all("~[0-9]+~", $cisla, $matches);
?>
Čísla sa ti jednotlivo uložia do poľa $matches s číselnými kľúčmi.
Yuff.3
Profil
s číselnými kľúčmi? čo to znamená? čo to je? :D
lionel messi
Profil
Yuff.3:
$matches bude pole:

var_dump($matches);
vráti:
array(1) {
  [0]=>
  array(12) {
    [0]=>
    string(1) "4"
    [1]=>
    string(1) "7"
    [2]=>
    string(1) "9"
    [3]=>
    string(1) "5"
    [4]=>
    string(1) "3"
    [5]=>
    string(1) "1"
    [6]=>
    string(2) "15"
    [7]=>
    string(2) "47"
    [8]=>
    string(2) "65"
    [9]=>
    string(2) "87"
    [10]=>
    string(2) "24"
    [11]=>
    string(2) "62"
  }
}

a s jednotlivými číslami môžeš jednoducho pracovať pomocou foreach cyklu, napr. si ich vypísať:
foreach ($matches[0] as $cislo)
{
  echo $cislo; //vypíše všetky čísla
}

Kľúče v tomto prípade nie sú veľmi dôležité, ospravedlňujem sa, ak bola zmienka o nich mätúca.


Pre istotu rekapitulácia kompletného kódu:
<?php
$cisla = "+4+7+9-5-3-1+15+-47+65+-87+24-62";
preg_match_all("~[0-9]+~", $cisla, $matches);
foreach ($matches[0] as $cislo)
{
  echo $cislo ." "; //vypíše všetky čísla, v tomto prípade pre prehľadnosť oddelené medzerou
}

Ten regulár môže byť aj v tvare
preg_match_all("~\d+~, $cisla, $matches);
ale je to úplne jedno, len pre poriadok.
Yuff.3
Profil
Chcem to použiť vo funkcii, kde mi porovná, či sa nachádza v tých číslach nejaké číslo .. podobne ako: if (in_array($moje_cislo, $vsetky_cisla)) {}
lionel messi
Profil
Yuff.3:
V tom prípade to stačí prejsť regulárom v [#8] a ďalej:
$mojecislo = 5;
if (in_array($mojecislo, $matches[0]))
{
  //ak je tam číslo 5, tak…
}
Yuff.3
Profil
Moc moc si mi pomohol :)
Vedel by si, (ak by sa to vôbec dalo spraviť), aby mi spočítalo všetky + a za (echo .$počet_plusiek "+";) mi vypísalo čísla, pred ktorými je + .. ?? Dúfam, že si pochopil čo tým myslím.. :) Ak nie skúsim vysvetliť nejako ináč ešte.. :)
Ďakujem.


No a tie čísla za + aby boli tiež ako $matches[0] - chcem s nimi ešte pracovať ďalej ..
juriad
Profil
Yuff.3:
To, že se snažíš nacpat seznam všech přátel a ještě nějaké příznaky (plus a mínus) do jednoho sloupce v databázi, ti to vše jen komplikuje. Napřed jsi měl přátele oddělené tečkami, teď používáš plus a mínus, co budeš dělat, až si budeš chtít uložit datum přidání mezi přátele? Předpokládám, že do závorky za ID přítele napíšeš datum. Budeš chtít někdy upozorňovat na aktivitu nebo narozeniny uživatele? Budeš chtít žebříčky uživatelů podle oblíbenosti? Budeš chtít hodnocení uživatelů?
Dokážeš si představit řešení kterékoli z těchto úloh? Jestli ne, měl bys začít přemýšlet, zda současný systém vůbec umožňuje jejich efektivní řešení. Takto se to ale nedělá z dobrých důvodů. Znovu ti řeknu, že při správném návrhu databáze bys tyto problémy vůbec neřešil.

Myslíš-li svůj projekt vážně, začni pořádně od spoda, od návrhu datového modelu. Jakmile databázi jednou navrhneš špatně, už se vezeš a lepíš jednu pitomost na druhou. Za chvíli se dostaneš do stavu, že udělání jedné malé změny se nutně projeví v celé aplikaci a nezbyde ti nic jiného, než ji z větší části přepsat znovu - nebo opustit nedokončenou. Vzniknou ti také kusy kódu, kterým se budeš vyhýbat, protože víš, že jim nerozumíš, jsou nepřehledné a trvalo dlouho je "odladit".

Z dobrého důvodu píši tímto tónem, protože chci abys věděl, že problémy, které řešíš, nikdo jiný neřeší, nemusí je řešit, protože jim nikdy nenastanou. Nepomáhá ti ani to, že pořád měníš zadání. Možná ty víš, co chceš, ale osobně o tom pochybuji.
Yuff.3
Profil
juriad:
Moc krát ti ďakujem - očividne vieš o čom hovoríš a ja sa každopádne netvárim, že nemáš pravdu. Jednoducho mi tento spôsob príde lepší a jednoduchší a viac mi vyhovuje. Nie som na úrovni, že by som zvládol navrhnúť DB a hrať sa s ňou do detailov - určite by som to zvládol, naučil by som sa to, ale zbytočne. Nemám v pláne riešiť to na úrovni, kde by to bolo potrebné..

Áno, priateľov mám vyriešených - presne podľa mojich predstáv. :)
A či si dokážem predstaviť riešenie problému ako napr. hodnotenie užívateľov? Práve na tom pracujem ;)
Preto by som moc ocenil, keby mi niekto odpovedal na (#13) otázky. Prakticky tým dokončím aj tento projekt - len tieto veci ma delia od ukončenia. :)
Fisir
Profil
Reaguji na Yuff.3:
Nikto ?? :(
Já, asi i spousta jiných lidí, ale nikomu se nechce řešit tvoje zbytečné problémy (špatná struktura databáze).

function countAndReturn($string){
    $regex = '/\+(\d+)/';
    preg_match_all($regex, $string, $matches);
    $return = $matches[1];
    foreach($return as $i => $int){
        $return[$i] = intval($int);
    }
    $return['count'] = count($return);
    return $return;
}
Yuff.3
Profil
Môžeš mi prosím ťa trochu popísať tú funkciu alebo nejako upraviť alebo neviem - pretože mi to vôbec nejde :(
Fisir
Profil
Reaguji na Yuff.3:
countAndReturn('+4+7+9-5-3-1+15+-47+65+-87+24-62');
Vrátí:
array(7) {
   [0]=>
   int(4)
   [1]=>
   int(7)
   [2]=>
   int(9)
   [3]=>
   int(15)
   [4]=>
   int(65)
   [5]=>
   int(24)
   ["count"]=>
   int(6)
 }
Té funkci předáš v jediném parametru ten řetězec čísel (+4+7+9-5-3-1+15+-47+65+-87+24-62) a ona ti v poli vrátí všechna čísla, před kterými je +. Navíc, pod klíčem count najdeš počet čísel, před kterými je +. Přesně tak, jak jsi chtěl.
Yuff.3
Profil
mmnt, čiže to musím takto vypísať všetky tie array ??
Nedá sa to spraviť tak, že tie čísla +4+7+9-5-3.. atď .. budú v $cisla - pretože ten počet čísel a znamienka pred nimi môže byť akýkoľvek - resp. vyťahujem to z DB - kde sa to zapisuje rôzne/náhodne..


Myslel som, že by sa dalo len: countAndReturn('$cisla'); a ďalej by pokračovala funkcia ktorú si mi napísalv #16 príspevku..


Absolútne žiadno mi to nejde :D :( :(
Fisir
Profil
Reaguji na Yuff.3:
Aha…

by sa dalo len: countAndReturn('$cisla');
Přesně tak, tuto funkci zavoláš (ale pozor, pokud chceš předat proměnnou $cisla, nesmí být v jednoduchých uvozovkách) a ta ti vrátí to pole, jak je zmíněno v [#18].
Yuff.3
Profil
Fisir:
Ale niečo tam je zle, na tej funkcii.. :( Aj keď som tam dal čísla pod tú funkciu: countAndReturn('+4+7+9-5-3-1+15+-47+65+-87+24-62') ; - v takomto tvare, tak to proste nič nevypíše :( :(


nestreba ju nejako zapnúť tú funkciu? :D napr. countAndReturn(TRUE) {echo "sem: " .$cisla;} ?? :D
Tori
Profil
Yuff.3:
tak to proste nič nevypíše
Fisirova funkce nic nevypisuje, ale vrací pole. Když ho chcete vypsat, musíte si o to říct. A abych vám ušetřila jeden dotaz, tak echo countAndReturn("+4+7+9"); nebude fungovat a vypíše jen "Array". Jednotlivé hodnoty v poli se dají procházet např. cyklem foreach (pak s nimi můžete dělat cokoli, třeba je vypsat), anebo si můžete zobrazit celé pole tak jako v [#18] funkcemi var_dump nebo print_r.
Koukněte taky na učebnici pehapko.cz - kapitola o polích je sice zrovna ještě v přípravě, ale můžete se tam naučit jiné základní věci.
Fisir
Profil
Reaguji na Yuff.3:
Pro všechny bude nejlepší, když se naučíš alespoň základy PHP.
Yuff.3
Profil
Základy ako tak ovládam, ale toto je na mňa otrchu zložité. Čiže ako teda vypíšem to čo potrebujem? Pretože stále mi to nejde aj keď som tam dal ten foreach pod tú funkciu.. Môžete mi niekto napísať ako konkrétne by to malo byť?? Zrejme som zavolal nesprávnu premennú alebo neviem :( Proste nič mi to nevypíše :(
Rád by som túto záležitosť konečne uzavrel..

Moc krát ďakujem.
Fisir
Profil
Reaguji na Yuff.3:
$numbers = countAndReturn('+4+7+9-5-3-1+15+-47+65+-87+24-62');
echo("Našel jsem ".$numbers['count']." čísel (");
foreach($numbers as $i => $number){
    if($i !== 0) echo("; ");
    echo($number);
}
echo(").");
Tohle je ale absolutně zbytečné, je to jako opsat písemku. Nic se tím nenaučíš.
Yuff.3
Profil
Vôbec to nie je zbytočné :) Teraz tomu chápem :) Ale ako dám záporné? -(mínus)??
Posledná vec k tejto téme a môžeme lock :D


Vlastne ešte jeden detail, to prvé číslo z tých kladných sa mi zopakuje ešte na konci :(
Fisir
Profil
Reaguji na Yuff.3:
Teraz tomu chápem
No, to je vidět.

ako dám záporné?
Chtěl jsi jenom čísla s plusem, ale můžeš mít samozřejmě i s mínusem…
function countAndReturn($string){
    preg_match_all('/\+(\d+)/', $string, $matches);
    $return['positive'] = $matches[1];
    preg_match_all('/-(\d+)/', $string, $matches);
    $return['negative'] = $matches[1];
    foreach($return as $type => $numbers){
        foreach($numbers as $i => $number){
            $return[$type][$i] = intval($number);
        }
    }
    $return['count']['positive'] = count($return['positive']);
    $return['count']['negative'] = count($return['negative']);
    return $return;
}

to prvé číslo z tých kladných sa mi zopakuje ešte na konci
To není to první číslo, že se s ním shoduje, je jen náhoda a hezky to ukazuje, žes ten kód jen zkopíroval. Zkus se zamyslet nad tím, co ten foreach cyklus dělá…
Yuff.3
Profil
Fisir:
Veľmi pekne moc krát ďakujem :)
No možno nechápem presne všetko :D
ako mám ale teraz zapísať tento riadok - echo("Našel jsem ".$numbers['count']." čísel ("); ?
Pretože mi vypíše len array .. :(

No a foreach si teda preštudujem a skúsim na to prísť sám :)

Ešte raz ďakujem :)
Kubo2
Profil
Yuff.3:
Teraz tomu chápem
No možno nechápem presne všetko
ako mám ale teraz zapísať tento riadok - echo("Našel jsem ".$numbers['count']." čísel ("); ?
Nerozumieš tomu vôbec (týmto ťa nijak neponižujem, iba zhŕňam to, čo je zjavné v tomto vlákne o tvojich vedomostiach). Tým „posledným detailom“ si nám to iba potvrdil.

Ak by ťa zaujímalo riešenie toho tvojho „posledného detailu“, odporúčam prečítať si niečo o type array v PHP a následne si tú premennú $numbers nechať vypísať funkciou print_r() ->
<?php
// ...
print_r($numbers);

Naozaj odporúčam vyskúšať to, čo som ti napísal, pretože to je asi najschodnejšia cesta, ako získať aspoň približnú predstavu o fungovaní polí („arrays“) v PHP.
Yuff.3
Profil
Verím, že Fisir mi napíše ako to má byť. Tvoj spôsob sa mi nepáči :(
« 1 2 »

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: