Theory
Registration ની list એ array છે
Event portal નો મુખ્ય data એ એક યાદી છે: Garba Night માટે નોંધાયેલા બધા લોકો. PHP માં એ યાદી એટલે array, અને PHP નાં arrays અસાધારણ રીતે શક્તિશાળી છે: એ સાદી ક્રમાંકિત યાદીઓ હોઈ શકે, ચાવીથી કિંમત સુધીના નકશા હોઈ શકે, કે records ના અંદરોઅંદર ગોઠવાયેલા કોઠા પણ હોઈ શકે.
Control flow (if, switch, loops) તો તમે 5 ભાષાઓમાંથી પહેલેથી જાણો છો; PHP વાળાં એમનાં રૂપોમાં ભાગ્યે જ કોઈ આશ્ચર્ય છે. એટલે આ પાઠ પોતાની શક્તિ ત્યાં ખર્ચે છે જ્યાં PHP ખરેખર જુદું પડે છે અને પરીક્ષામાં પણ ભારે વજન ધરાવે છે: arrays, એમને ફરી વળતો loop (foreach), અને એમને sort કરતાં તથા નવો ઘાટ આપતાં functions નો પરિવાર.
Theory
Control flow, ટૂંકમાં
PHP નાં control structures એ જાણીતો સમૂહ છે:
- નિર્ણયો માટે if / elseif / else અને switch (દરેક case સાથે
break) - ગણતરીવાળા અને શરતવાળા આંટા માટે for, while, do-while
- Arrays ને ફરી વળવા માટે foreach: આ એક પર ખરેખર ધ્યાન આપવા જેવું છે
foreach 2 રૂપે આવે છે: દરેક કિંમત સુધી પહોંચવા foreach ($arr as $value), અને દરેક ચાવી તથા એની કિંમત બંને સુધી પહોંચવા foreach ($arr as $key => $value). નીચે આવતાં associative arrays માટે બીજું રૂપ અનિવાર્ય છે.
Theory
Array ના ત્રણ પ્રકાર
PHP નાં arrays 3 ઘાટમાં આવે છે:
- Indexed: 0 થી શરૂ થતી સંખ્યાત્મક ચાવીઓ.
$names = ["Riya", "Aman"];એટલે$names[0]એ "Riya" છે - Associative: કિંમતો સાથે જોડાયેલી STRING ચાવીઓ.
$event = ["seats" => 350, "venue" => "Ground"];એટલે$event["seats"]એ 350 છે - Multidimensional: arrays ની અંદર arrays, જે records ના કોઠા માટે ઉત્તમ છે: જેમ કે registration ની list જ્યાં દરેક નોંધ પોતે એક વ્યક્તિની વિગતોનું associative array હોય
Associative array એ PHP ની ઓળખસમાન તાકાત છે: સાફસૂથરી key => value syntax સાથેનો અંદરથી જ મળતો નકશો (dictionary જેવો).
Practical
Arrays અને foreach (output નું અનુમાન કરો)
<?php
// Associative array: keys map to values
$event = ["venue" => "Ground", "seats" => 350, "fee" => 50];
foreach ($event as $key => $value) {
echo "$key = $value <br>";
}
// venue = Ground
// seats = 350
// fee = 50
// Multidimensional: a registration list
$regs = [
["name" => "Riya", "paid" => true],
["name" => "Aman", "paid" => false],
];
echo $regs[0]["name"]; // Riya
echo count($regs); // 2
?>
At a glance
Sorting નો પરિવાર (પરીક્ષાનો માનીતો)
| Function | શેના પરથી sort કરે છે | ચાવીનું જોડાણ સાચવે છે? |
|---|---|---|
| sort() | કિંમતો, ચડતા ક્રમમાં | ના: 0,1,2 એમ ફરી ક્રમાંક આપે છે (ચાવીઓ જાય છે) |
| asort() | કિંમતો, ચડતા ક્રમમાં | હા: key => value ની જોડી સાચવે છે |
| ksort() | ચાવીઓ, ચડતા ક્રમમાં | હા: ચાવી પ્રમાણે ફરી ગોઠવે છે |
| rsort() / arsort() / krsort() | ઉપરના પ્રમાણે, ઊતરતા ક્રમમાં | એમનાં ચડતા ક્રમવાળાં જોડિયાં જેવું જ |
Quiz
તમારી પાસે associative array છે: $scores = ["Riya"=>80, "Aman"=>95]. તમારે score પ્રમાણે sort કરવું છે, પણ દરેક નામ એના score સાથે જોડાયેલું જ રહેવું જોઈએ. કયું function?
- sort(): એ કિંમતો sort કરે છે
- asort(): એ કિંમત પ્રમાણે sort કરે છે અને key => value નું જોડાણ સાચવે છે
- ksort(): એ ચાવી પ્રમાણે sort કરે છે
- array_merge(): એ arrays ને ભેગાં કરે છે
Show the answer
asort(): એ કિંમત પ્રમાણે sort કરે છે અને key => value નું જોડાણ સાચવે છે
asort() કિંમત (scores) પ્રમાણે sort કરે છે પણ key-value ની જોડી સાચવે છે, એટલે Riya 80 સાથે અને Aman 95 સાથે જોડાયેલાં જ રહે છે: બરાબર એ જ જે તમને જોઈએ છે. sort() પણ કિંમતો ક્રમમાં ગોઠવત, પણ એ array ને 0,1,2 એમ ફરી ક્રમાંક આપીને નામની ચાવીઓ નાશ કરી નાખત: કોણે કેટલા ગુણ મેળવ્યા એ ખબર જ ન રહેત. ksort() ચાવીઓ પ્રમાણે (નામ મૂળાક્ષરના ક્રમમાં) sort કરે છે, scores પ્રમાણે નહીં. array_merge() sort કરતું જ નથી. sort સામે asort નો આ ભેદ (એ ચાવીઓ સાચવે છે કે નહીં) PHP નાં arrays વિશે સૌથી વધુ પુછાતો સવાલ છે: sort ચાવીઓ ગુમાવે છે, asort એમને સાચવે છે.
Think first
sort() એ નકશો નાશ કરી નાખ્યો
એક વિદ્યાર્થી score પ્રમાણે ક્રમ ગોઠવવા $scores નામના associative array પર sort() ચલાવે છે, પછી foreach($scores as $name => $score) થી આંટા મારે છે. નામની જગ્યાએ Riya અને Aman ને બદલે 0 અને 1 નીકળે છે. શું થયું તે સમજાવો, પછી tap કરો.
Show the answer
sort() કિંમતોને ચડતા ક્રમમાં ગોઠવે છે, પણ સાથે સાથે array ને 0, 1, 2... એવી તાજી સંખ્યાત્મક ચાવીઓ આપીને ફરી ક્રમાંકિત કરે છે, અને મૂળ string ચાવીઓ ફેંકી દે છે. એટલે sort() પછી array બને છે [0=>80, 1=>95]: નામ ગયાં, એમની જગ્યાએ સંખ્યાઓ આવી, અને હવે foreach ને ચાવીઓ તરીકે 0 અને 1 દેખાય છે. ઉપાય છે asort(), જે કિંમત પ્રમાણે sort કરે છે અને નામની ચાવીઓ જોડાયેલી રાખે છે. શીખ: associative arrays પર sort નું function એ પ્રમાણે પસંદ કરો કે તમારે ચાવીઓ સાચવવી છે કે નહીં: sort અને rsort એમને ફેંકી દે છે, જ્યારે asort, arsort, ksort અને krsort એમને સાચવે છે. જ્યાં ચાવીઓ અગત્યની ન હોય એવી સાદી indexed યાદીઓ પર જ sort() તરફ હાથ લંબાવો.
Watch out
Array ના ફાંદા
Associative arrays પર sort(): એ ચાવીઓ નાશ કરે છે; એમને સાચવવા asort() વાપરો.
key => value વગરનું foreach: associative array પર ચાવીઓ જોવા માટે as $key => $value જોઈએ.
count() સાથે એકનો ફરક: count() ઘટકોની સંખ્યા આપે છે; indexed arrays માટે છેલ્લો ક્રમાંક count() - 1 હોય છે.
અસ્તિત્વ ન ધરાવતી ચાવીઓ: $arr["missing"] વાપરવાથી ચેતવણી આવે છે અને null મળે છે; પહેલાં isset() થી તપાસો.
foreach ચાલુ હોય ત્યારે array બદલવું: એથી ઝીણી ભૂલો થઈ શકે છે; એને બદલે નવું array બનાવો.
Theory
Data અને logic પતી ગયાં; હવે ખરો input
Portal હવે પોતાની registration ની list ને multidimensional array તરીકે સંઘરી શકે છે, એને foreach થી ફરી વળી શકે છે અને જોઈએ એ રીતે sort કરી શકે છે. પણ data ક્યાંકથી તો આવવો જોઈએ: એટલે કે FORM ભરતા વપરાશકાર પાસેથી. પછીનો પાઠ $_GET અને $_POST થી HTML forms ને PHP સાથે જોડે છે, વારંવાર વપરાતા logic ને FUNCTIONS માં વીંટે છે, અને દરેક ખરા login form ને જોઈતી input ની ચકાસણી તથા સફાઈ ઉમેરે છે. Unit 1 ત્યાં પૂરું થાય છે જ્યાં portal જીવતું થાય છે: ખરું registration સંભાળતાં.
Summary
Key takeaways
- Control flow જાણીતું છે: if/elseif/else, switch (break સાથે), for, while, do-while, અને arrays માટે foreach.
- foreach arrays ને ફરી વળે છે: કિંમતો માટે as $value, અને key-value ની જોડી માટે as $key => $value.
- Array ના ત્રણ પ્રકાર: indexed (0 થી શરૂ થતી સંખ્યાત્મક ચાવીઓ), associative (string ચાવી અને કિંમત), multidimensional (arrays ની અંદર arrays).
- Associative arrays એ PHP ના અંદરથી મળતા નકશા છે; multidimensional arrays records ના કોઠાનું ઢાંચું આપે છે (registration ની list).
- Sorting: sort() કિંમતો ક્રમમાં ગોઠવે છે પણ ફરી ક્રમાંક આપે છે (ચાવીઓ ગુમાવે છે); asort() key-value ની જોડી સાચવે છે; ksort() ચાવી પ્રમાણે sort કરે છે.
- તમારે ચાવીઓ સાચવવી છે કે નહીં એ પ્રમાણે sort નું function પસંદ કરો.
- યાદ રાખવાની કડી: sort ચાવીઓ ગુમાવે છે, asort એમને સાચવે છે.