Diskuze: Notice: Array to string conversion in
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zadne var_dumpy tam nemas. Treba je mas na spatnych mistech.
Error vetsinou napise cislo radku. Tam hledej chybu, nebo radky nad tim.
public function authUser($articlePermission = array('user'), $userPersmission = array('user')) {
// nejsem si jisty, ze to takhle muzes napsat. V radku, kde predavas
// parametry nemuzes naplnovat hodnotami, jakoze do pole vkladat 'user'.
// array() by tam mel vzit a pak to doresit uz podminkou na count()
Nejsou tam, jen jsem s jejich pomocí zjišťoval co do funkce vlastně teče (jejich výpis je ve druhém screenu). A data tam jdou správná. Jinak kde se zhruba chyba nachází vím. Je to i ve screenu, s tím chybovím hlášením, jedná se o funkci authUser(), v administrationControlleru(). Ale at se na to koukám jak se na to koukám tak tam chybu nevidím. Resp. s touto chybiu jsem se zatím setkal jen v případě kdy se pokusím pole vypsat pomocí echa. Proto sem to psal jsem
ještě bych dodal že to zda jsou parametry naplněné hodnotami je zcela jedno funguje to stejným způsobem, resp. to vyhazuje stejnou chybu.
Asi mas naivni predstavu, ze budu vstupni data opisovat z obrazku. To asi
radeji prenecham reakci na nekoho jineho? Navic jsem si obrazku nevsiml,
takze dik za upozorneni.
<?php
$a = array(
0 => array(
'role_name' => 'admin',
0 => 'admin'
),
1 => array(
'role_name' => 'developer',
0 => 'developer'
)
);
$b = array(
0 => array(
'role_name' => 'developer',
0 => 'developer'
)
);
$result = (bool) array_intersect($a, $b);
var_dump($result);
?>
https://www.php.net/array_intersect
Obavam se, ze problem je prosty. Autori funkce nepocitali s rekurzi (
array(array()) ). Funkce ocekava ze hodnota pole bude string a nikoliv
array.
Jeden manik v online dokumentaci zminil, ze pouzil serialize.
<?php
$a = array(
0 => array(
'role_name' => 'admin',
0 => 'admin'
),
1 => array(
'role_name' => 'developer',
0 => 'developer'
)
);
$b = array(
0 => array(
'role_name' => 'developer',
0 => 'developer'
)
);
foreach ($a as $key=>$value) $a[$key] = serialize($value);
foreach ($b as $key=>$value) $b[$key] = serialize($value);
var_dump($a, $b);
$result = array_intersect($a, $b);
var_dump($result, (bool) $result);
?>
A take je tam spousta dalsich prikladu. Neco s rekurzemi pres cykly, jine s
array_values, json_encode, ....
To serialize vypada slibne. Veme array, prevede ji na string a pak uz porovnava
stringy. Pokud tam nemas dalsi zaludnosti, mohlo by to splnit ucel. A pokud to
nepotrebujes extra rychle.
Jo, a co je dulezite zminit, ze problem, chybu, vypisuje, dle obrazku funkce array_intersect. A podle chyby, tu jsi sem nezkopisoval celou, co by bylo asi lepsi, tak ta funkce ocekava jina data, nez ji posilas. Cili, co jsem psal, po zkouknuti dokumentace a prikladu jsem dosel k zaveru, ze to neumi zpracovat hodnotu typu array, pole uvnitr pole, array(array()).
Nejspíš si mi pohl vyřešit jiný problém. To jak se mi vypisují data do print_r(), popř do var_dump(). Tedy jako rekurze jsem již zde řešil dříve odpovědím mi bylo jen naformátování dat, někde budu mit ve wampu něco špatně nastavenýho protože když jsem to co mám nahrál na RPI server. Tak se mi chyba i přes zapnuté chybové hlášení vůbec nezobrazovala. Jen mě netrklo že by to mohlo být tím že se mi data vypisují do rekurze. Což už bude chybou přímo někde v routeru nebo v kontroleru. Proto mi to celé přestalo fungovat ve chvíli kdy jsem jsem data začal tahat z databáze. Dokud jsem je tam na zkoušku dával manuálně, tedy v kódu tak to fungovalo jak mělo.
Zobrazeno 8 zpráv z 8.