У меня странная проблема с определением и доступом к значениям массива. Строки, которые я создал, возвращаются пустыми. Когда я делаю var_dump, я вижу, что значения массива имеют правильную длину строки, но в результате «». Когда я пытаюсь получить доступ к переменной, я получаю «». Может кто-нибудь объяснить это поведение?
//define the case combinations
$cases = array(
"<CO><VO><CO><VOP>",
"<VO><CLOSED><VO>",
"<OPEN><CO><VO>",
"<CO><VOP><ESCB>",
"<COP><VO><CO><CVN>",
"<STVE><ESCB>");
Вар-дамп:
array(6) { [0]=> string(17) "" [1]=> string(16) "" [2]=> string(14) "" [3]=> string(15) "" [4]=> string(18) "" [5]=> string(12) "" }
Аналогичная проблема возникает с другими массивами:
$siteSuffix = array(
"data" => array('com','org','net','edu'),
"probabilities" => array(1,1,1,1), //not actually used
"name" => "siteSuffix"
);
Массив в «data» печатает строки таким же образом.
Если проблема не связана с этим, вот ссылка на github, где остальная часть кода: ссылка на сайт
Похоже, потому что у вас есть htmlentities
в ваших фактических данных (массив) <
а также >
PHP не будет интерпретировать их как фактические значения / строки.
Что вы можете сделать, это конвертировать символы с помощью htmlspecialchars()
, например:
$cases = array(
"<CO><VO><CO><VOP>",
"<VO><CLOSED><VO>",
"<OPEN><CO><VO>",
"<CO><VOP><ESCB>",
"<COP><VO><CO><CVN>",
"<STVE><ESCB>");
foreach ($cases as $case){
var_dump(htmlspecialchars($case));
}
Вывод var_dump:
string(41) "<CO><VO><CO><VOP>" string(34) "<VO><CLOSED><VO>" string(32) "<OPEN><CO><VO>" string(33) "<CO><VOP><ESCB>" string(42) "<COP><VO><CO><CVN>" string(24) "<STVE><ESCB>"
Проблема с угловыми скобками <
а также >
распечатать их в браузере вы можете просто использовать echo htmlentities($str)
или же htmlspecialchars($str)
для каждого элемента массива.
Если вы используете командную строку php, вам не нужна такая кодировка.
См: https://www.w3schools.com/php/func_string_htmlentities.asp