Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Функция extract

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Perun
Отправлено: 22 Февраля, 2020 - 11:26:28
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




У меня ступор с функцией extract. Не понимаю, как именно присваиваются имена переменным и значения в многомерных массивах. Как выглядят распакованные данные, и где можно их все увидеть? Например, есть такой, чисто академический, надуманный пример:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $mainArray =
  3.         [
  4.         'first0' =>
  5.                 [
  6.                         'first1' => 'первый',
  7.                         'second2' => 'второй'
  8.                 ],
  9.         'second0' =>
  10.                 [
  11.                         'first1' => 'третий',
  12.                         'second2' => 'четвертый'
  13.                 ]
  14.         ];
  15. function ext ($flag, $arr = [])
  16. {
  17.         if ($flag)
  18.         {
  19.                 return extract($arr);
  20.         }
  21. }
  22.  
  23. ext(1, ['mainArray' => $mainArray]);
  24.  

после extract будет одна переменная $mainArray, в которой будет массив mainArray, который бел передан в функцию?

(Отредактировано автором: 22 Февраля, 2020 - 11:38:18)

 
 Top
Vladimir Kheifets
Отправлено: 22 Февраля, 2020 - 12:52:12
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Perun пишет:
У меня ступор с функцией extract. Не понимаю, как именно присваиваются имена переменным и значения в многомерных массивах. Как выглядят распакованные данные, и где можно их все увидеть? Например, есть такой, чисто академический, надуманный пример:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $mainArray =
  3.         [
  4.         'first0' =>
  5.                 [
  6.                         'first1' => 'первый',
  7.                         'second2' => 'второй'
  8.                 ],
  9.         'second0' =>
  10.                 [
  11.                         'first1' => 'третий',
  12.                         'second2' => 'четвертый'
  13.                 ]
  14.         ];
  15. function ext ($flag, $arr = [])
  16. {
  17.         if ($flag)
  18.         {
  19.                 return extract($arr);
  20.         }
  21. }
  22.  
  23. ext(1, ['mainArray' => $mainArray]);
  24.  

после extract будет одна переменная $mainArray, в которой будет массив mainArray, который бел передан в функцию?

Добрый день!
Функция ext ничего не вернет,т.к. return extract($arr) так не работает.
PHP:
скопировать код в буфер обмена
  1. function ext ($flag, $arr = []){
  2.         if ($flag)
  3.         {
  4.                 echo "<pre>";
  5.                 print_r($arr);
  6.                 var_dump(extract($arr));
  7.                 print_r($first0);
  8.                 print_r($second0);
  9.         }
  10. }
  11. ext(1, $mainArray);
extract($arr) создаёт два массива $first0, $second0
PHP:
скопировать код в буфер обмена
  1. (
  2.     [first0] => Array
  3.         (
  4.             [first1] => первый
  5.             [second2] => второй
  6.         )
  7.  
  8.     [second0] => Array
  9.         (
  10.             [first1] => третий
  11.             [second2] => четвертый
  12.         )
  13.  
  14. )
  15. int(2)
  16. (
  17.     [first1] => первый
  18.     [second2] => второй
  19. )
  20. (
  21.     [first1] => третий
  22.     [second2] => четвертый
  23. )
  24.  
Удачи!
 
 Top
LIME
Отправлено: 22 Февраля, 2020 - 14:07:01
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Perun потому что надуманный потому и непонятный
Не надо вообще эту фцию хотеть!
Используй массивы чем реже тем лучше
Для контейнерезации данных используйте DTO
Он будет структурированным и содержать только то что нужно
 
 Top
Perun
Отправлено: 22 Февраля, 2020 - 20:37:43
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




Vladimir Kheifets пишет:
Функция ext ничего не вернет,т.к. return extract($arr) так не работает.

Почему ничего не вернет? Разве extract не возвращает количество распакованых элементов?

(Отредактировано автором: 22 Февраля, 2020 - 21:00:59)

 
 Top
Строитель Модератор
Отправлено: 23 Февраля, 2020 - 13:54:49
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Цитата:
после extract будет одна переменная $mainArray, в которой будет массив mainArray, который бел передан в функцию?
Да.
 
 Top
Vladimir Kheifets
Отправлено: 23 Февраля, 2020 - 16:10:20
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Perun пишет:
Vladimir Kheifets пишет:
Функция ext ничего не вернет,т.к. return extract($arr) так не работает.

Почему ничего не вернет? Разве extract не возвращает количество распакованых элементов?

верно, extract возвращает количество распакованых элементов, я показал var_dump(extract($arr));
Непонятно, зачем Вам нужна такая функция.

(Отредактировано автором: 23 Февраля, 2020 - 16:11:18)

 
 Top
Perun
Отправлено: 23 Февраля, 2020 - 17:37:06
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




Vladimir Kheifets пишет:
Непонятно, зачем Вам нужна такая функция.

Встретил пример, в котором из массива выводятся значения. Сам пример я не очень понял, почему и зачем именно так сделано. Не смотря на это я хотел ознакомиться как работает эта функция.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB