Здравствуйте, уважаемые! Я изучаю функции PHP. Добрался сейчас до array_splice. Код (Text): array_splice($capitals, 1, 0, $komi); //$capitals - массив, в который будем вставлять, 1 - это начиная с какого индекса в массиве будем вставлять, 0 - это сколько элементов хотим удалить, $komi - массив из которого будем вставлять значения В учебнике написано, что эта функция умеет вставлять значения в массивы. Проверил на обычном массиве - да, умеет. Еще в учебнике написано, что она умеет вставлять значения в ассоциативные массивы (когда определены парами ключ-значение). Проверил на ассоциативном массиве - почему-то ключ становится равным нулю (0). Ошибка. Код (Text): Вывод: Array ( [Свердловская обл.] => Екатеринбург [0] => Сыктывкар [Пермский край] => Пермь [Ханты-Мансийский АО] => Ханты-Мансийск [Тюменская обл.] => Тюмень [Курганская обл.] => Курган [Челябинская обл.] => Челябинск [респ. Башкортостан] => Уфа ) Кто-нибудь знает почему? У меня такойкод: Код (Text): <?php $capitals = array( 'Свердловская обл.' => "Екатеринбург", 'Пермский край' => "Пермь", 'Ханты-Мансийский АО' => "Ханты-Мансийск", 'Тюменская обл.' => "Тюмень", 'Курганская обл.' => "Курган", 'Челябинская обл.' => "Челябинск", 'респ. Башкортостан' => "Уфа" ); $komi = array('респ. Коми' => "Сыктывкар"); array_splice($capitals, 1, 0, $komi); print_r($capitals); ?>
Добрый день! Эта функция имеет PHP: function array_splice_assoc(array &$original, int $offset, int $length = 0, $replacement = null) { $slice = array_slice($original, 0, $offset, true); if (!is_null($replacement)) { // cast to array $replacementArray = is_array($replacement) ? $replacement : [$replacement]; $slice = array_merge($slice, $replacementArray); } $original = array_merge($slice, array_slice($original, $offset+$length, null, true)); return $original; } источник https://gist.github.com/khanzadimahdi/86fc594649ac9f8bf6aba2e943a9940a PHP: $capitals = array( 'Свердловская обл.' => "Екатеринбург", 'Пермский край' => "Пермь", 'Ханты-Мансийский АО' => "Ханты-Мансийск", 'Тюменская обл.' => "Тюмень", 'Курганская обл.' => "Курган", 'Челябинская обл.' => "Челябинск", 'респ. Башкортостан' => "Уфа" ); print_r($capitals); $komi = array('респ. Коми' => "Сыктывкар"); print_r($komi); array_splice_assoc($capitals, 1, 0, $komi); print_r($capitals); /* Array ( [Свердловская обл.] => Екатеринбург [Пермский край] => Пермь [Ханты-Мансийский АО] => Ханты-Мансийск [Тюменская обл.] => Тюмень [Курганская обл.] => Курган [Челябинская обл.] => Челябинск [респ. Башкортостан] => Уфа ) Array ( [респ. Коми] => Сыктывкар ) Array ( [Свердловская обл.] => Екатеринбург [респ. Коми] => Сыктывкар [Пермский край] => Пермь [Ханты-Мансийский АО] => Ханты-Мансийск [Тюменская обл.] => Тюмень [Курганская обл.] => Курган [Челябинская обл.] => Челябинск [респ. Башкортостан] => Уфа ) */ Улачи!
Действительно неинтуитивное поведение функции. Вот мой вариант PHP: <?php $capitals = [ 'Свердловская обл.' => 'Екатеринбург', 'Пермский край' => 'Пермь', 'Ханты-Мансийский АО' => 'Ханты-Мансийск', 'Тюменская обл.' => 'Тюмень', 'Курганская обл.' => 'Курган', 'Челябинская обл.' => 'Челябинск', 'респ. Башкортостан' => 'Уфа' ]; $komi = ['респ. Коми' => 'Сыктывкар']; $keys = array_keys($capitals); array_splice($keys, 1, 0, array_keys($komi)); $values = array_values($capitals); array_splice($values, 1, 0, array_values($komi)); $capitals = array_combine($keys, $values); var_export($capitals);
Добрый день! Очевидно, что функция array_splice без дополнительных манипуляций не подходит для вставки элементов в ассоциативный массив. Однако можно сделать это использую функцию array_slice PHP: <? echo "<pre>"; $capitals = array( 'Свердловская обл.' => "Екатеринбург", 'Пермский край' => "Пермь", 'Ханты-Мансийский АО' => "Ханты-Мансийск", 'Тюменская обл.' => "Тюмень", 'Курганская обл.' => "Курган", 'Челябинская обл.' => "Челябинск", 'респ. Башкортостан' => "Уфа" ); $komi = array('респ. Коми' => "Сыктывкар"); $offset=1; $start=hrtime(true); ####################################################################### $capitals = array_merge(array_slice($capitals, 0, $offset, true), $komi, array_slice($capitals, $offset, NULL, true)); ####################################################################### $end=hrtime(true); $eta=$end-$start; var_export($capitals); echo "<hr>"; echo $eta/1e+6; /* array ( 'Свердловская обл.' => 'Екатеринбург', 'респ. Коми' => 'Сыктывкар', 'Пермский край' => 'Пермь', 'Ханты-Мансийский АО' => 'Ханты-Мансийск', 'Тюменская обл.' => 'Тюмень', 'Курганская обл.' => 'Курган', 'Челябинская обл.' => 'Челябинск', 'респ. Башкортостан' => 'Уфа', ) 0.0052 */ ?> Сравнение по времени выполнения Код с array_splice: 0.0052 Ваш вариант: 0.0079 функуция array_splice_assoc: 0.0087 Удачи!
ТС обратного и не заявлял Остается уточнить, где он это вычитал, и поглумиться над автором сего опуса.При условии, что ТС понял всё правильно.
Добрый день! см. результат выдаваемый функцией array_splice($capitals, 1, 0, $komi) без дополнительных манипуляций Как говорил Лёня Голубков в рекламе МММ - "а вы попробуйте" Удачи!