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
Форумы портала PHP.SU :: Версия для печати :: Функция extract
Форумы портала PHP.SU » » Вопросы новичков » Функция extract

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

1. Perun - 22 Февраля, 2020 - 11:26:28 - перейти к сообщению
У меня ступор с функцией 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, который бел передан в функцию?
2. Vladimir Kheifets - 22 Февраля, 2020 - 12:52:12 - перейти к сообщению
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.  
Удачи!
3. LIME - 22 Февраля, 2020 - 14:07:01 - перейти к сообщению
Perun потому что надуманный потому и непонятный
Не надо вообще эту фцию хотеть!
Используй массивы чем реже тем лучше
Для контейнерезации данных используйте DTO
Он будет структурированным и содержать только то что нужно
4. Perun - 22 Февраля, 2020 - 20:37:43 - перейти к сообщению
Vladimir Kheifets пишет:
Функция ext ничего не вернет,т.к. return extract($arr) так не работает.

Почему ничего не вернет? Разве extract не возвращает количество распакованых элементов?
5. Строитель - 23 Февраля, 2020 - 13:54:49 - перейти к сообщению
Цитата:
после extract будет одна переменная $mainArray, в которой будет массив mainArray, который бел передан в функцию?
Да.
6. Vladimir Kheifets - 23 Февраля, 2020 - 16:10:20 - перейти к сообщению
Perun пишет:
Vladimir Kheifets пишет:
Функция ext ничего не вернет,т.к. return extract($arr) так не работает.

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

верно, extract возвращает количество распакованых элементов, я показал var_dump(extract($arr));
Непонятно, зачем Вам нужна такая функция.
7. Perun - 23 Февраля, 2020 - 17:37:06 - перейти к сообщению
Vladimir Kheifets пишет:
Непонятно, зачем Вам нужна такая функция.

Встретил пример, в котором из массива выводятся значения. Сам пример я не очень понял, почему и зачем именно так сделано. Не смотря на это я хотел ознакомиться как работает эта функция.

 

Powered by ExBB FM 1.0 RC1