Jump to content
php.lv forumi

Recommended Posts

Posted

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).

Posted

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"

}

Posted

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"

}

Posted

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.

Posted

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.

Posted

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'])

×
×
  • Create New...