За последние 24 часа нас посетили 22226 программистов и 1019 роботов. Сейчас ищут 588 программистов ...

Как получить любой ключ элемента массива ?

Тема в разделе "PHP для новичков", создана пользователем Алексей Др, 12 окт 2020.

  1. Алексей Др

    Алексей Др Новичок

    С нами с:
    28 авг 2018
    Сообщения:
    36
    Симпатии:
    0
    key работает только с именными. Если просто номер, то выдает "". Можно ли как-нибудь заставить её и их воспринимать ?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.820
    Симпатии:
    736
    Адрес:
    Татарстан
    непонятно - что вы хотите?
    если числовые индексы - там и узнавать ничего не надо - индекс- он и есть число
     
  3. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    Функция key()?
    Всё у неё в порядке с возвратом и "номерных" индексов, и "именными".
     
  4. Алексей Др

    Алексей Др Новичок

    С нами с:
    28 авг 2018
    Сообщения:
    36
    Симпатии:
    0
    Наверное, у меня проблемы с оператором foreach. Пытаюсь написать функцию, которая переводила бы элементы массив в массив из массивов.
    Код (Text):
    1. function ArrayForObjects($ObjMass){
    2.     $massacra=[];
    3.     foreach ($ObjMass as $elem){
    4.         $massacra[key($elem)]=(array)$elem;
    5.     }
    6.     return $massacra;
    7. }
    Если элемент не именной а номерной, то key($elem) вместо номера выдает "", читай - из номерных элементов запишется только значение последнего. Что с этим можно сделать ?
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.790
    Симпатии:
    649
    А чЁ as $key=>$value тут не работает?

    Если $ObjMass – это объект с итератором (ХЗ, что означает «элементы массив»), есть iterator_to_array.
     
  6. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    Перечитайте на досуге: "Управляющая конструкция foreach".
    Кроме того:
    То есть, $value - просто переменная. Потому и получаете пустую строку, применяя к ней функцию key().
     
  7. twim32

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

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    PHP:
    1. trait Arrayable
    2. {
    3.     public function toArray()
    4.     {
    5.         $data = [];
    6.         foreach($this as $property => $value) {
    7.             $data[$property] = $value;
    8.         }
    9.         return $data;
    10.     }
    11. }
    12.  
    13. class Test
    14. {
    15.     use Arrayable;
    16.    
    17.     public $public_one = 1;
    18.     public $public_two = 2;
    19.     protected $protected  = 3;
    20.     private $private = 4;
    21. }
    22.  
    23. $test = new Test;
    24. var_dump( json_decode(json_encode($test), true)); // только публичные свойства
    25. var_dump( (array) $test); // ... глянь сам
    26. var_dump( $test->toArray() ); // все свойства