anonīms Posted December 2, 2008 Report Share Posted December 2, 2008 Kā var zināt, vai piemēram labojot profilu ir ieķeksēts checkbox? viens variants ir if($_POST['checkboks']), bet tad vēlos zināt, kāds viņš tiek ievietots db? vai arī checkbox value varu norādīt un ja viņš ir ieķeksēts tad tiek ievietots db vai, ja ir tukšs, tad db ievietot citu skaitli... Kā tur īsti ir? Ideja ir tāda, ka lietotājs savā /profils/ lapā ieķeksē checkboxu (Rādīt tavu e-pastu). Link to comment Share on other sites More sharing options...
Aleksejs Posted December 2, 2008 Report Share Posted December 2, 2008 Ja čekbokss nav ieķeksēts, tad atslēgas ar tādu nosaukumu nav $_POST masīvā. Līdz ar to: if(array_key_exists('checkboxa_nosaukums',$_POST){ //ir ieķeksēts un uzstādam vērtību, kādu nu jāuzstāda } else { //nav ieķeksēts un uzstādam, citēju,"..tad ievietot db citu skaitli" - uzstādām vērtību vienādu ar šo "citu skaitli" } Link to comment Share on other sites More sharing options...
anonīms Posted December 2, 2008 Author Report Share Posted December 2, 2008 ok, sapratu Link to comment Share on other sites More sharing options...
Toms Posted December 2, 2008 Report Share Posted December 2, 2008 Kāpēc ne isset() ? Pārbaudi vienu vērtību, nevis skrien caur visu masīvu.. if(isset($_POST['checkboxa_nosaukums']){ //ir ieķeksēts un uzstādam vērtību, kādu nu jāuzstāda } else { //nav ieķeksēts un uzstādam, citēju,"..tad ievietot db citu skaitli" - uzstādām vērtību vienādu ar šo "citu skaitli" } Link to comment Share on other sites More sharing options...
Aleksejs Posted December 2, 2008 Report Share Posted December 2, 2008 Tom, principā es piekrītu, ka var būt arī tā, bet bija pirms pāris mēnešiem diskusija (kurā pats arī piedalījies ;) ), kurā bubu sniedza mani pārliecinošus argumentus "kāpēc". Faktiski izskrien tam masīvam cauri tā vai tā - domāju, ka algoritmu sarežģītības ziņā nekas neatšķirās (taču eksperimentus neesmu veicis, tādēļ 100% neapgalvoju šo faktu). No dokumentācijas (angļu val.) Example #2 array_key_exists() vs isset()isset() does not return TRUE for array keys that correspond to a NULL value, while array_key_exists() does. <?php $search_array = array('first' => null, 'second' => 4); // returns false isset($search_array['first']); // returns true array_key_exists('first', $search_array); ?> Kas var būt aktuāli, bet var arī nebūt. Link to comment Share on other sites More sharing options...
bubu Posted December 2, 2008 Report Share Posted December 2, 2008 Tas būtu visai slimi, ja array_key_exists skrietu visam masīvam cauri, t.i. darbotos O(n) laikā. Jēga no tādas funkcijas nekāda nebūtu. Un tā kā tas ir labi zināms, ka php masīvi īstenībā ir heštabulas, tad parbaudīt to, vai masīvā eksistē elements ar dotu atslēgu, ir visai dabiski, ka O(1). Nu labi, īstenībā sliktākā situācijā var gadīties O(n), bet nu praktiski tu diez vai tādu gadījumu piedzīvosi (kad vairums masīva atslēgu heši sakrīt). isset gadījumā tā vai tā pašam php ir jāmēģina dabūt elements ar doto atslēgu no asociatīvā masīva - respektīvi tieši tāda pat situācija array_key_exists gadījumam. Elements ar doto masīvu arī ir jāmeklē, gribi vai negribi. Tā ka tas ir stila jautājums, nevis ātrdarbības. Iespējams, ka php ir kautkā hakaini iehakots, lai isset būtu ātrāks, jo tas kā nekā ir keywords, nevis funkcija, kuram atšķirībā no pēdējā nevajag aiztikt steku, taču otram nav nekāda pamatojuma būt lēnākam (ja nu vienīgi php developeru slikums to kārtīgi implementēt). Atšķirībai katrā ziņā jābūt minimālai. Link to comment Share on other sites More sharing options...
martins256 Posted December 2, 2008 Report Share Posted December 2, 2008 Es, piemēram, lietoju isset, jo tam ir īsāks nosaukums, plašāks lietojums. Piemēram, iespēja pārbaudīt visus $_POST datus uzreiz: isset($_POST['checkbox'],$_POST['input'],$_POST['username'],$_SESSION['user']) Link to comment Share on other sites More sharing options...
Toms Posted December 2, 2008 Report Share Posted December 2, 2008 hehe, redz kā piemirsies bija :) Link to comment Share on other sites More sharing options...
Recommended Posts