Czy ktoś może mi wyjaśnić, dlaczego nie możesz przekazać klucza jako referencji?Alternatywy do przekazania klucza i wartości przez odniesienie:
Ex:
if(is_array($where)){
foreach($where as &$key => &$value){
$key = sec($key);
$value = sec($value);
}
unset($key, $value);
}
Zgłasza:
Fatal error: Key element cannot be a reference in linkstest.php on line 2
Czy mogę zrobić coś podobnego przy użyciu array_map? Wszystko, co chcę zrobić, to iterować po tablicy asocjacyjnej, a także uciec z klucza i wartości za pomocą funkcji sec().
Array mapa jest dla mnie trudne do zrozumienia:
Próbowałem wielu rzeczy z array_map, ale nie mogę zmusić go do działania na klawiszach bezpośrednio.
Czy dostanę jakąkolwiek korzyść z wydajności przy użyciu mapy tablicowej niż po prostu używając pętli foreach?
Co mi się nie podoba foreach jest to, że nie może działać na tablicy bezpośrednio, a mamy do czynienia z tworzeniem tymczasowych tablic i ich rozbrajania:
foreach($where as $key => $value){
$where[secure($key)] = secure($value);
}
To może zakończyć się niepowodzeniem, jeżeli stwierdzi coś uciec w kluczu, dodając nowy element i utrzymując go bez ruchu.
Więc utknąłem z czymś takim?
$temparr = array();
foreach($where as $key => $value){
$temparr[secure($key)] = secure($value);
}
$where = $temparr;
unset($temparr);
Jakieś alternatywy?
To zasługuje na wielkie stare * Dlaczego *? Co jeśli 'sec ($ key)' spowoduje wartość innego istniejącego klucza? Czy po prostu nadpisujesz istniejący klucz? Musisz wyjaśnić, dlaczego w aplikacji klucz może być niebezpieczny. – webbiedave
Dlaczego nie może być niebezpieczne? Możesz łatwo zmieniać klucze $ _POST na formularzach lub z czymś takim jak Tamperdata. Niektóre klucze używam w zapytaniach mysql. – Ben
Nie powiedziałem, że nie mogą być. Powiedziałem, że musisz wyjaśnić, dlaczego w * twojej aplikacji * klucz może być niebezpieczny. To nam powie najlepsze podejście do twojej sytuacji. – webbiedave