Tudom, hogy a tutorial szépen leírja, de ráment 20 perc bugvadászat, mert nem gondoltam erre:)
- pch blogja
- A hozzászóláshoz be kell jelentkezni
- 1002 megtekintés
Hozzászólások
a szám nem string hanem szám ha nem jelzem
Szerintem így normális.
Egyébként egy másik megoldás:
$x="$x";
- A hozzászóláshoz be kell jelentkezni
Ha $x egy string valami határolóval való szétválasztásával kapott akármi, akkor "illik" annak is string-nek lennie:
$vector = '12,13'; list($x,$y) = explode(',', $vector); var_dump($x, $y);
A kimenete: string(2) "12", string(2) "13".
Pch megoldása (cast to string) szerintem több szempontból is jobb: olvashatóbbá teszi a kódot (benne van, hogy ott kifejezetten stringre akarja castolni) és valszeg gyorsabb is, mert nincs változóbehelyettesítéses, string értelmezéses játék (lásd, pl. Java-ban melyik a gyorsabb: String.format("%s", obj) vs. obj.toString()).
BlackY
- A hozzászóláshoz be kell jelentkezni
Amit írtál, azt értem, de valaki félreértett valamit pch-tól.
Én úgy értettem, hogy az a "baja", hogy lett egy $x változója, ami szám, és ő sztringként akarja használni. Így értve az explode-os részt nem értem, hogy jön ide :)
Fogalmam sincs egyébként, hogy az én vagy pch megoldása a gyorsabb, de speciel nekem a "$x" olvashatóbb, illetve sokszor szoktam még a sztringbe mást is írni.
- A hozzászóláshoz be kell jelentkezni
Az $x változó int és stringként akarja használni use case stimmel, csak a leírásban azt írja, hogy explode, +-al prefixeli, és utána a PHP már számként kezeli, valahogy nekem nem stimmel. A stringbe más írás is stimmel.
<?php
$start = microtime(true);
$int = 123456;
for($j = 0; $j < 1000; $j++) {
for($i = 0; $i < 10000; $i++) {
$string = "$int";
}
}
echo (microtime(true) - $start), PHP_EOL;
$start = microtime(true);
for($j = 0; $j < 1000; $j++) {
for($i = 0; $i < 10000; $i++) {
$string = (string)$int;
}
}
echo (microtime(true) - $start), PHP_EOL;
Nálam átlag olyan 10+%-al lassabb az idézőjeles.
BlackY
- A hozzászóláshoz be kell jelentkezni
%-kal
t
- A hozzászóláshoz be kell jelentkezni
Akasztják a hóhért :(
BlackY
- A hozzászóláshoz be kell jelentkezni
Ez egészen addig jó, míg van mit szétvágni.
Ebbe a hibába estem bele.
Egy $vector='12'; bemenet esetén nem sztring kimenetet kapsz, ha nem mondom meg.
pch
--
http://www.buster.hu "A" számlázó
--
- A hozzászóláshoz be kell jelentkezni
#php --version
PHP 5.3.17 (cli)
var_dump(explode(',', '12'));
Kimenet:
array(1) { [0]=> string(2) "12" }
Szerk.: Sőt, ha a 12-t, mint int-et adom át, akkor is működik.
BlackY
- A hozzászóláshoz be kell jelentkezni
Szintén, 5.4.17.
- A hozzászóláshoz be kell jelentkezni
Ez volt a kód: [szerk]
$ kerlink=$_GET['masodik'];
$ kerlink = vedelem(trim($kerlink));
$ kerlink=htmlspecialchars($kerlink);
$ kerlink=explode(" ",$kerlink);
$ count = count($kerlink);
for($ i=0;$i <$ count;$ i++){
if ($ i>0) $kereses.=" ";
$ ker_darab=trim($kerlink[$i]);
$ ker_darab=(string)$ker_darab; < ez került bele utólag
$ kereses.="+".$ ker_darab;
}
..
..matc h (t_nev,t_cikkszam) agains t ('".$kereses."' IN BOOLEA N MOD E)..
ha a termék pl.: 123456 volt nem találta meg. (akkor a POST-ba 123456 volt)
A (string) beírása után ment tökéletesen..
Igen, elvileg explode után is stringnek kellett volna lennie, de más ötletem nemvan.
pch
--
http://www.buster.hu "A" számlázó
--
- A hozzászóláshoz be kell jelentkezni
Egyre inkább kezdek a "passz"-ra futni (nem lehet, hogy a szám rövidebb volt, mint az ft_min_word_length?). Egy PHP verziószámot még tudnál nézni? Ebben a kódban ugyanis nagyjából esélye sincs bárhol számként értelmezni a string-et (pl. akkor a + kapásból eltűnne előle)
Szerk.: az ft_min_word_length meg hülyeség volt tőlem, akkor a string-re kasztolás után is ugyanazt is kéne kapnod.
BlackY
- A hozzászóláshoz be kell jelentkezni
Az a baj, hogy én is wtf fejet vágtam.
Apache/2.2.22 (Ubuntu)
MySQL kliens verzió: 5.5.32
PHP Version 5.3.10-1ubuntu3.7
pch
--
http://www.buster.hu "A" számlázó
--
- A hozzászóláshoz be kell jelentkezni
Kipróbáltam egy 12.04-es virt gépen, ugyanezekkel a verziókkal, a http://pastebin.com/LZS6v14w címen levő kóddal, Works For Me. E_NOTICE | E_STRICT error_reportinggal sem mond semmit?
BlackY
- A hozzászóláshoz be kell jelentkezni
pch válaszára: lemaradt egy lezáró kód tag, meg úgy a kód egy része, tippre pont a lényeg :) Így a trim miatt kb. kutya kötelessége string-nek lennie a $ker_darab-nak.
BlackY
- A hozzászóláshoz be kell jelentkezni
Szamomra is kisse furcsa:
# php5 -r "print phpversion() . \"\\n\"; var_dump(explode(',', '12'));"
5.2.6-1+lenny16
array(1) {
[0]=>
string(2) "12"
}
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni