PHP: Фатальная ошибка — оператор не поддерживается для строк в

#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 также возвращает false

3. Это ожидаемая строка, и как 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(...);