За последние 24 часа нас посетили 34348 программистов и 1751 робот. Сейчас ищет 971 программист ...

как узнать индекс последнего добавленного в массив элемента

Тема в разделе "PHP для новичков", создана пользователем osvical, 7 июн 2015.

  1. osvical

    osvical Новичок

    С нами с:
    9 янв 2015
    Сообщения:
    67
    Симпатии:
    0
    Код (PHP):
    1. $array; //некоторый массив
    2. $arrayObjects; //пока пустой массив, который заполнится объектами
    3. foreach($array as $item){
    4.     $arrayObjects[]= new Object($item);
    5. }
    как узнать, с каким индексом только что создался элемент массива? нужно сразу после создания объекта и присвоения в новый элемент массива применить к нему метод:
    Код (PHP):
    1. $arrayObjects[]= new Object($item);
    2. $объектСозданныйВыше->metod();
    понятно, что можно каждый раз высчитывать длину массива, но это не рационально. делать через for, а счетчик начинать не с 0, а вычислять для него длину массива до начала цикла? а вдруг там какой-то индекс пропущен будет... можно ли проще, не хранится ли индекс только-что добавленного элемента где-то?
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Re: как узнать индекс последнего добавленного в массив элеме

    ну если массив не уменьшается то можно декремент результата array_push юзать
     
  3. osvical

    osvical Новичок

    С нами с:
    9 янв 2015
    Сообщения:
    67
    Симпатии:
    0
    Re: как узнать индекс последнего добавленного в массив элеме

    спасибо! хотя...
    выходит, с таким же успехом я могу и count вызывать после добавления... короче надо отказаться от этого подхода, пересмотреть алгоритм.
     
  4. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Код (PHP):
    1. $arrayObjects[] = $new_obj =  new Object($item);
    2. $new_obj->metod();
    3.  
    Хотя я вызываю count и не парюсь. Нет там каких-то жутких затра :)
     
  5. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    индексы массива бывают не только цифровые и последний индекс не всегда равен count()-1.

    в общем случае надо так:
    Код (PHP):
    1. echo end($array); // выведет последний элемент
    2. echo key($array); // выведет индекс текущего элемента (после end() - индекс последнего, после reset() - первого)
    3.  
     
  6. osvical

    osvical Новичок

    С нами с:
    9 янв 2015
    Сообщения:
    67
    Симпатии:
    0
    точно! что-то я жестко затупил)) делал же уже подобное, только не с объектами. в буферную переменную, а потом ее присвоить.

    Код (PHP):
    1. $buf=  new Object($item);
    2. $buf->metod1();
    3. $buf->metod2();
    4. $buf->metod3();
    5. $arrayObjects[] = $buf;
    6.  
    всем большое спасибо!