За последние 24 часа нас посетили 39918 программистов и 2369 роботов. Сейчас ищут 1035 программистов ...

Отсчёт ключей массива

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

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Ключ начинается с 0, есть ли функция из коробки, которая изменить отсчёт, что бы начинался с 1?
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    array_unshift unset?
     
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    @nospiou

    вот так сделал

    PHP:
    1.   $arr = [
    2.             '0' => 'раз',
    3.             '1' => 'два',
    4.             '2' => 'три',
    5.             '3' => 'четыре',
    6.             '4' => 'пять',
    7.             '5' => 'шесть',
    8.             '6' => 'семь',
    9.         ];
    10.        
    11.      
    12.         $val = array_values($arr);
    13.        
    14.         $countKey = count($arr);
    15.        
    16.         $mass = ['0'=>''];
    17.        
    18.         for($i = 1; $i <= $countKey; $i++) {
    19.             $mass[]=$i;
    20.         }
    21.        
    22.         unset($mass[0]);
    23.        
    24.         $c = array_combine($mass, $val);
    25.        
    26.         echo '<pre>';
    27.             print_r($c);
    28.         echo '</pre>';
     
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    А мой вариант чем не подошел? Слишком просто?)
    PHP:
    1. $arr = ['1', '2'];
    2. array_unshift($arr, '0');
    3. unset($arr[0]);
    4. print_r($arr);
     
    Dimon2x нравится это.
  5. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    как всё сложно в твоей головушке :)
    PHP:
    1. $input = ['раз', 'два', 'три', 'четыре', 'пять'];
    2. $output = [];
    3. foreach ( $input as $k => $val ) {
    4.   $i = $k + 1;
    5.   $output[$i] = $val;
    6. }
     
    Dimon2x нравится это.
  6. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    PHP:
    1. function getByOrderNum($arr, $num) {
    2.     return $arr[$num-1];
    3. }
    4.  
    5. $array = [4,7,9,23];
    6. echo getByOrderNum($array, 2); // 7
     
  7. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    А что об этом никто не вспомнил?
    PHP:
    1. $a = [1 => "раз", "два","три"];
     
  8. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    потому что
     
  9. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    @mkramer этот способ не подходит, потому что массив создаётся автоматически, например результат из базы.
     
  10. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ну решения тебе подсказали уже, поэтому пофлудим :) И почему тебе не без разницы, с какого числа начинается индексация? Я как-то к нулю быстро привык, когда с Pascal (где принято с единицы, особенно в старом паскале, на котором я учился программированию) перешёл на C, где всегда с нуля.
     
  11. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Dimon2x нравится это.
  12. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    @mkramer это я делаю один костыль
     
  13. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    Вариант с array_combine может выглядеть так:
    PHP:
    1. $arr2 = array_combine(range(1, count($arr)), $arr);