За последние 24 часа нас посетили 23557 программистов и 1664 робота. Сейчас ищут 836 программистов ...

Массив с объектами

Тема в разделе "PHP для новичков", создана пользователем FerroDump, 2 янв 2017.

  1. FerroDump

    FerroDump Новичок

    С нами с:
    19 ноя 2016
    Сообщения:
    22
    Симпатии:
    0
    Здравствуйте.
    Сразу покажу наглядно мой вопрос:

    PHP:
    1. <?php
    2. class Test
    3. {
    4. public $name;
    5. public function __construct (string $name)
    6. {
    7. $this->name = $name;
    8. }
    9.  
    10. public function getName() : string
    11. {
    12. return $this->name;
    13. }
    14. }
    15.  
    16. $objects =
    17. [
    18. new Test("a"),
    19. new Test("b"),
    20. new Test("c"),
    21. new Test("d"),
    22. ];
    23.  
    24. $name = [];
    25. foreach($objects as $obj)
    26. {
    27. $name[] = $obj->getName();
    28. }
    29.  
    30. echo implode(", ", $name);
    31.  
    32. /*
    33. На выводе получаем:
    34. a, b, c, d
    35. */
    Как можно одной стандартной функцией сразу получить массив с именами объектов?
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    PHP:
    1. <?php
    2. class Test
    3. {
    4. public $name;
    5. public function __construct (string $name)
    6. {
    7. $this->name = $name;
    8. }
    9. public function getName() : string
    10. {
    11. return $this->name;
    12. }
    13. }
    14. $objects =
    15. [
    16. new Test("a"),
    17. new Test("b"),
    18. new Test("c"),
    19. new Test("d"),
    20. ];
    21.  
    22. $names = $objects;
    23. array_walk($names, function(&$val,$key){
    24.     $val = $val->getName();
    25. });
    26.  
    27.  
    28. echo implode(", ", $names);
    29. /*
    30. На выводе получаем:
    31. a, b, c, d
    32. */
     
    FerroDump и [vs] нравится это.
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    При всём уважении к сурикату, с foreach лучше
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    еще так можно
    PHP:
    1. $names = [];
    2. array_walk($objects, function($val,$key) use (&$names){
    3.     $names[] = $val->getName();
    4. });
    5. echo implode(", ", $names);
    --- Добавлено ---
    @mkramer ну ТС просит функцию )
     
    FerroDump нравится это.
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    PHP:
    1. echo implode(", ", array_map(function ($v) { return $v->getName();}, $objects));
    Я лучше всех :)
     
    Fell-x27, denis01, FerroDump и ещё 1-му нравится это.
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Да, но ТСа, видимо, интересует принципиальная возможность.
     
  7. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Кстати, а в чём отличие array_map() от array_walk() ?
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    _map создает новый массив, _walk нет.
     
    machetero и denis01 нравится это.