Как установить динамические имена массивов в PHP - PullRequest
1 голос
/ 12 октября 2011

привет, я пытаюсь использовать динамическое имя массива. но когда я запускаю этот код, я получаю ошибку $marker is undefined.

 if (isset($arr)) {
               foreach ($arr as $key => $value) {

                  $marker.$key = array();

                   $marker.$key ['position'] = $value['lat'] . ',' . $value['long'];
                   $marker.$key ['draggable'] = 'TRUE';
                   $marker.$key ['ondragend'] = "test(this.getPosition().lat(),this.getPosition().lng())";

                   $this->ci->googlemaps->add_marker($marker.$key);
                   $i++;
                  }

           }

как мне создать динамическое имя массива ????

Ответы [ 3 ]

2 голосов
/ 12 октября 2011

Прочтите руководство по эксплуатации. Оператор точки в PHP совершенно не связан с оператором точки в Javascript и аналогичных языках - он выполняет конкатенацию строк. Я не совсем понимаю, что вы пытаетесь сделать, но я вполне уверен, что конкатенация строк не так.

Чтобы уточнить, что это делает:

$marker.$key ['draggable'] = 'TRUE';

... это;

  • получить значение в $marker, интерпретировать его как строку
  • получить значение в $key, интерпретировать его как строку
  • сцепление $marker и $string
  • интерпретирует результирующую строку как массив и устанавливает для элемента «draggable» строку (!) «TRUE». Я даже не уверен, что это делает - строка допускает индексацию в стиле массива (которая ссылается на отдельные символы), но я понятия не имею, что могут дать нецелые индексы.
1 голос
/ 12 октября 2011

Попробуйте, когда вы выполните конкатенацию, PHP видит только $ key как массив и объединяет неверный путь. В любом случае, где определен маркер $ ??

if (isset($arr)) {
               foreach ($arr as $key => $value) {
                  $myarray = $marker.$key;
                  $myarray = array();

                   $myarray['position'] = $value['lat'] . ',' . $value['long'];
                   $myarray['draggable'] = 'TRUE';
                   $myarray['ondragend'] = "test(this.getPosition().lat(),this.getPosition().lng())";

                   $this->ci->googlemaps->add_marker($myarray);
                   $i++;
                  }
           }
0 голосов
/ 12 октября 2011

Имена динамических массивов в Php можно сделать так:

foreach($arr as $key => $value) {
$myarray[$key] = $value;
}

Тем не менее, вы также можете сделать это, чтобы установить переменную массива

foreach($arr as $key => $value) {
${$key}[$key] = $value;
}
...