#php
#php
Вопрос:
У меня есть приведенный ниже код, и я получаю ошибку
PHP: Fatal error - operator not supported for strings in...
Я прочитал некоторые статьи и вопросы, но не могу понять, почему этот конкретный пример падает. Я не вижу, что я объявляю массив как строку.
Есть идеи?
код
$a = Array();
foreach ($value as $k => $v) {
$name = $v["name"];
$value = $v["value"];
$a["day_a"] = ($name == "day_a" ? 'true':'false');
$a["day_b"] = ($name == "day_b" ? 'true':'false');
$a["day_c"] = ($name == "day_c" ? 'true':'false');
$a["day_d"] = ($name == "day_d" ? 'true':'false');
$a["day_e"] = ($name == "day_e" ? 'true':'false');
$a["day_f"] = ($name == "day_f" ? 'true':'false');
if (strpos($name, '_radio_') !== false) {
$string = substr($name,0,5);
$a[$string] = $value;
}
if (strpos($name, '_select_') !== false) {
$string = substr($name,0,5);
$split = explode("_",$name);
$type = $split[3];
$a[$string][] = Array("type"=>$type,"location"=>$location); // ERROR HERE
}
// if name like day_a radio then $day_a is true
// if $day_a
}
var_dump( $a, $string); die();
array(6) {
["day_a"]=>
string(5) "false"
["day_b"]=>
string(5) "false"
["day_c"]=>
string(5) "false"
["day_d"]=>
string(5) "false"
["day_e"]=>
string(5) "false"
["day_f"]=>
string(5) "false"
}
string(5) "day_c"
Комментарии:
1. выведите $string и проверьте.
2.
substr
также возвращает false3. Это ожидаемая строка, и как substr может возвращать false, если он выдает эту ошибку?
4.
var_dump( $a, $string ); die();
пожалуйста, прямо перед ошибкой.5. отладка:
var_dump($string, $type, $location, __FILE__.__LINE__);
непосредственно перед строкой с ошибкой. Нет необходимости публиковать результат, если вы не понимаете, в чем ошибка. Добавьте вывод к своему вопросу, а не публикуйте его в комментариях. Его легче читать, так как вы можете его отформатировать.
Ответ №1:
Вероятно, вы создаете строку $a[$string] = $value;
, а затем пытаетесь добавить к ней массив $a[$string][] = Array(...);
Вы можете добавить проверку:
if ( isset($a[$string]) ) {
throw new Exception("Item ".$string." already exists!");
}
Комментарии:
1. Я не понимаю, извините — я могу создать что-то вроде $a[«someName»][] = …. так почему я не могу вместо этого использовать $string, т.е. создавать ключ динамически
2. Вы можете, но вы уверены, что
$a[$string]
это еще не существует? Попробуйте сбросить $a и $string перед ошибкой, и вы увидите…3. Это да, но я все равно хотел бы выполнить эту функцию, как если бы я уже создал $a [«day_a»], возможно, я захочу сделать $a [«day_a»] [«date»], но с «day_a», являющимся динамическим / переменным
4. @pee2pee Вы не можете установить для $a[«day_c»] значение «false» (строка), а затем установить
$a["day_c"][] = Array(...);
5. итак, сначала вам нужно установить
$a["day_a"] = Array();
, а затем вы можете сделать$a["day_a"][] = Array(...);