За последние 24 часа нас посетили 22944 программиста и 1239 роботов. Сейчас ищут 753 программиста ...

"array_unshift" для строковых и численных ключей

Тема в разделе "PHP для новичков", создана пользователем RAD-lance, 31 янв 2013.

  1. RAD-lance

    RAD-lance Активный пользователь

    С нами с:
    2 дек 2012
    Сообщения:
    4
    Симпатии:
    0
    Друзья, нужна помощь.

    Допустим есть массив:
    Код (Text):
    1.  
    2. $country[36] = 'Китай';
    3. $country[39] = 'Япония';
    Нам надо в начало массива добавить элемент с строковым ключом
    Код (Text):
    1.  
    2. $def['placeholder'] = 'Страны';
    3. $result = $def+$country;
    Получаем:
    Код (Text):
    1.  
    2. Array
    3. (
    4.     [36] => 'Китай';
    5.     [39] => 'Япония';
    6.     ['placeholder'] => 'Страны';
    7. )
    array_merge также не дает нужного результата.
    array_reverse c параметром true вообще не изменяет массив, без параметра работает, но результат не тот.

    Хотя нам нужно чтоб элемент placeholder был первым.
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    как вариант
    Код (PHP):
    1. $a = array(
    2.     36 => 'Китай',
    3.     39 => 'Япония',
    4. );
    5. $b = array('placeholder' => 'Страны',);
    6.     array_merge(
    7.         array_keys($b), array_keys($a)
    8.     )
    9.     ,array_merge($b,$a)
    10. ); 
    но должно быть проще

    Добавлено спустя 4 минуты 32 секунды:
    хотя у меня даже ваше
    $result = $def+$country;
    нормально пашет
     
  3. Tokha

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

    С нами с:
    29 янв 2013
    Сообщения:
    77
    Симпатии:
    0
    Можно так:
    Код (Text):
    1. <?
    2.  $str = array("111", "222");
    3.  $keys = array_pad(array_keys($str), -(count($str) + 1), 'NewKey');
    4.  $str = array_pad($str, -(count($str) + 1), 'NewValue');
    5.  $str = array_combine($keys, array_values($str));
    6. ?>
    В Вашем случае:
    Код (Text):
    1. <?
    2.  $keys = array_pad(array_keys($country), -(count($country) + 1), 'placeholder');
    3.  $country = array_pad($country, -(count($country) + 1), 'Страны');
    4.  $country = array_combine($keys, array_values($country));
    5. ?>
     
  4. RAD-lance

    RAD-lance Активный пользователь

    С нами с:
    2 дек 2012
    Сообщения:
    4
    Симпатии:
    0
    Спасибо! Оба решения сработали.
    Но использовал вариант на основе array_combine. Показался мне более ясным.
     
  5. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Код (PHP):
    1. $country[36] = 'Китай';
    2. $country[39] = 'Япония';
    3.  
    4. $def['placeholder'] = 'Страны';
    5.  
    6. foreach($country as $k=>$v)
    7.     $def[$k]=$v;