PHP count() funkcija tukšam virknes (string) mainīgajam atgriež 1

PHP Ikdienas ķibeles

Nesen konstatēju ka  count("") nav 0 vai False, bet gan 1, biju pats izspriedis (neskatoties dokumentācijā), ne masīva elementiem vajadzētu būt php brīdinājumam ("warning"), ka parametram jābūt masīvam, un atgriest false, vai 0.
Šāda pārpratuma dēļ gadijās ka kāda koda daļā izpildījās biežāk kā vajadzētu, jo arī pie jebkura virknes, vai cipariskas vērtības, patiesībā pie jebkādas vērtības izņēmot masīvu count() atgriež 1.

Protams, paprātojot, var saprast ka jebkurš cits elements, arī tukša simbolu virkne, ir viens elements.
Cik mums ir elementu ar neko? Viens elements ar neko.
Cik mums ir TRUE vērtības, viena.

Ok, jāpiekrīt vien ir, citu variantu jau nav, jāliek aiz aus un jāatceras šis triks. Starpcitu, arī print_r, darbojas līdzīgi, arī nebļāuj, ka padotais parametrs nav masīvs, bet izdrukā šo masīvu.

Šeit arī piemērs ar php kodu:

<?Php
function print_out_data($data_array=array())
{
    //chcking if there is any elements in array
    if (count($data_array))
    {
        //if there is atleast one element
        print('<h4>'.__FUNCTION__.' result: Here goes data:</h4>');
        print("Element count :".count($data_array));
        print("<pre>");
        print_r($data_array);
        print("</pre>");
    }
    else
    {
        //if there is no elements
        print('<h4>'.__FUNCTION__.' result: There is no data</h4>');
        print("Element count :".count($data_array));
    }
    
}

print('<h2>Test Results</h2>');

//RESULT IS AS EXPECTED
print('<h3>Test 1: Expected result</h3>');
print('<p>$data = array();<br/>Should print out "There is no data"</p>');
$data = array();
print_out_data($data);

//RESULT IS AS EXPECTED
print('<h3>Test 2: Expected result</h3>');
print("<p>$data = array('item'=>'Important data');<br/>Should print out the array items</p>");
$data = array('item'=>'Important data');
print_out_data($data);

//RESULT IS AS UNEXPECTED
print('<h3>Test 3: Expected result</h3>');
print('<p>No parameter passed.<br/>
      Should print out "There is no data"</p>');
print_out_data();

//RESULT IS AS UNEXPECTED
print('<h3>Test 4: Unexpected result?<h3>');
print('<p>$data = "";<br/>
      For me this result was as a surprise, but after reading PHP manual understood,
      that forn non array elements except the NULL it behaves that it would be an array with one element!
      Even if the element is emtpy string.
      Should print out "There is no data"?</p>');
$data = "";
print_out_data($data);

//RESULT IS AS UNEXPECTED
print('<h3>Test 5: Unexpected result?<h3>');
print('<p>
$data = FALSE;<br/>
Should print out "There is no data"?</p>');
$data = FALSE;
print_out_data($data);

//RESULT IS AS UNEXPECTED
print('<h3>Test 6: Unexpected result?<h3>');
print('<p>$data = TRUE;<br/>
        Should print out "There is no data"?</p>');
$data = TRUE;
print_out_data($data);


print('<h3>Test 7: Expected result<h3>');
print('<p>$data = NULL;<br/>
        There is no surprise null is null. No element count
        Should print out "There is no data"?</p>');
$data = NULL;
print_out_data($data);


print('<h3>Test 8: Unexpected <h3>');
print('<p>$data = -5.6;<br/>
        ?</p>');
$data = -5.6;
print_out_data($data);

Test Results

Test 1: Expected result

$data = array();
Should print out "There is no data"

print_out_data result: There is no data

Element count :0

Test 2: Expected result

Notice: Array to string conversion in /home/itdep/www/data/uploadedImages/count_example.php on line 33

Array = array('item'=>'Important data');
Should print out the array items

print_out_data result: Here goes data:

Element count :1
Array
(
    [item] => Important data
)

Test 3: Expected result

No parameter passed.
Should print out "There is no data"

print_out_data result: There is no data

Element count :0

Test 4: Unexpected result?

$data = "";
For me this result was as a surprise, but after reading PHP manual understood, that forn non array elements except the NULL it behaves that it would be an array with one element! Even if the element is emtpy string. Should print out "There is no data"?

print_out_data result: Here goes data:

Element count :1

Test 5: Unexpected result?

$data = FALSE;
Should print out "There is no data"?

print_out_data result: Here goes data:

Element count :1

Test 6: Unexpected result?

$data = TRUE;
Should print out "There is no data"?

print_out_data result: Here goes data:

Element count :1
1

Test 7: Expected result

$data = NULL;
There is no surprise null is null. No element count Should print out "There is no data"?

print_out_data result: There is no data

Element count :0

Test 8: Unexpected

$data = -5.6;
?

print_out_data result: Here goes data:

Element count :1
-5.6

Vai raksts bija noderīgs?

Paldies par tavu atsauksmi!

Varbūt tev raksts patika tik ļoti ka esi gatavs mums uzsaukt alu?

Uzsaucot alu, dosi mums iedvesmu rakstīt jaunus, lieliskus rakstus biežāk. Sen zināms ka alus ir iedvesmas degviela.
"Uzsauktais aliņš" var titk izmantot arī dažu tēriņu (servera izmaksas, domeina maksas, utt) segšanai.

Vai arī..........

Vai mēs varam cerēt uz detalizētāku atsauksmi?

Klau! Palīdzi mums uzlabot šo rakstu. Varbūt vari mums atklāt, kas tev nepatika šajā rakstā, vai kas tev likās nepariezs.... Varbūt raksts neatbilst tam ko tu meklēji? Patiesībā jebkura veida papildus informācija, mums noderētu!
Paldies jau iepriekš!

Lūdzu aizpildi šo lauku
Lūdzu ievadiet derīgu e-pasta adresi.

Raksti no kategorijas "Ikdienas ķibeles"

Nosūtīt formu datus jaunā cilnē, jaunā logā

Šodien bija vajadzība nosūtīt formas datus, jaunā cilnē, un tas izrādījās tik loģiski un vienkāršī, ka es pa to neiedomājos. Bet īsā komunikācijā ar Google un Stack Exchange man pateica, ka tas ir tieši tāpat kā ar saitēm, norādam target="_blank" un lieta darīta....

N-tā elementa selektori IE8/IE7 nestrādā

Nesen konstatēju ka  count("") nav 0 vai False, bet gan 1, biju pats izspriedis (neskatoties dokumentācijā), ne masīva elementiem vajadzētu būt php brīdinājumam ("warning"), ka parametram jābūt masīvam, un atgriest false, vai 0.
Šāda pārpratuma dēļ gadijās ka kāda koda daļā izpildījās biežāk kā vajadzētu, jo arī pie jebkura…

Uzdot jautājumu!

Ievadiet derīgu e-pasta adresi!
Lūdzu aizpildi šo lauku