Intereting Posts
Получить возможные комбинации массивов PHP-дезинфицирующее средство для HTML Как отслеживать выполнение кода в PHP? Подключение исходного кода PHP и отправка формы в базу данных MySQL Вызов PHP-файла с использованием AJAX Как запланировать выполнение скрипта PHP на стороне сервера? Обновить / обновить страницу в браузере без повторной отправки формы? Google API Client "токен обновления должен быть передан или установлен как часть setAccessToken" Предупреждение: PDOStatement :: bindValue (): SQLSTATE : Недопустимый номер параметра: Столбцы / Параметры основаны на 1 php-запрос для широты и долготы iOS не ищет близлежащие mysql lat и lon с выводом xml Назначение переменных и отображение результатов jsTree асинхронный поиск – триггер загружает новые узлы как когниционист санирует исходные данные? Является ли порядок ассоциативного массива гарантированным в PHP? Code Igniter – лучшее место для объявления глобальной переменной

Имя индекса динамического массива PHP

Я хочу передать функцию значение индекса массива – например ['client_name'] – значение первого уровня работает, потому что я могу сделать

$index = client_name; function arraything ($index) { return $this->arraytolookat[$index]; } 

Вопрос в том, как … как это сделать, если это многоядерный массив?

Я попробовал выражение eval и, по-видимому, он не оценивает скобки хорошо … Поэтому я попробовал это.

  $index = “[0]['client_name']”; Eval(“$this->arraytolookat$index”); 

Но он просто терпит неудачу … крылатые о неожиданном [- любые идеи?

EDIT: я не знаю, сколько уровней может потребоваться для этой функции, поэтому я не могу просто добавить в конце определенное количество скобок. Это не так просто, как кажется. ^^

EDIT 2: В основном – я написал инструмент проверки формы, и одна из функций возвращает правильные данные post – мне нужен простой метод, когда при вводе имени элемента формы он будет буквально возвращать данные POST обратно элементу, например getFormData («client_name») – однако, когда форма становится более сложной, она может перейти в массивы, мне нужно подготовиться к возможности getFormData («['$ i'] client_name») или somthing вдоль этих строк, postdata в этом классе, чтобы функция была использована. Я просто хочу, чтобы эта функция принимала строку, а не массив.

Solutions Collecting From Web of "Имя индекса динамического массива PHP"

Вы можете передать массив индексов этой функции ниже. Поэтому, если вы хотите получить $some_array[0]['client_name']['third_level_index'] вы можете сделать это:

 function get_array_value(array $array, array $indexes) { if (count($array) == 0 || count($indexes) == 0) { return false; } $index = array_shift($indexes); if(!array_key_exists($index, $array)){ return false; } $value = $array[$index]; if (count($indexes) == 0) { return $value; } if(!is_array($value)) { return false; } return get_array_value($value, $indexes); } $some_array = array(/* nested array */); $indexes = array(0, 'client_name', 'third_level_index'); $value = get_array_value($some_array, $indexes); 
 function arraything ($arrayOfIndexes) { $current = $this->array; foreach ($arrayOfIndexes as $curIndex) { $current = $current[$curIndex]; } return $current; } $x = arraything (array(0, 'client_thing')); 

Нет подтверждения (например, для отсутствующих ключей), но идея должна быть ясной.

Функция get_array_value работает хорошо. Поэтому я также написал функцию set_array_value.

Вот оно:

 function get_array_value($array, $indexes) { if (count($indexes) == 1) { return $array[$indexes[0]]; } $index = array_shift($indexes); return get_array_value($array[$index], $indexes); } function set_array_value(&$array, $indexes, &$value) { if (count($indexes) == 1) { return $array[reset($indexes)] = $value; } $index = array_shift($indexes); return set_array_value($array[$index], $indexes, $value); } $some_array = array(); $some_array[0]['client_name']['id'] = 1; $some_array[1]['client_name']['id'] = 2; $indexes = array(0, 'client_name', 'id'); $value = get_array_value($some_array, $indexes); print_r($value); $id = 23; set_array_value($some_array, $indexes, $id); $value = get_array_value($some_array, $indexes); print_r($value); 

Надеюсь, поможет 🙂

: Nirav

 $first = arraything(0); echo $first['client_name']; 

Похоже, вы пытаетесь слишком сильно перегрузить этот аргумент. Можно ли его переписать, чтобы сделать это более аккуратно? Вы можете вернуть это прямо …

 $this->arraytolookat[0]['client_name']; 

Некоторые структуры имеют вспомогательную функцию для доступа к элементам массива с таким оператором . (в строке, конечно).

попробовали цикл foreach, я не уверен, что это лучшее решение. идет что-то вроде этого

 foreach($array as $key => $value){ arraything ($key); } 

или используйте array_keys()