2013-04-08 2 views
0

что у меня есть это:Изменение ключи массива

$services = array(); 
$services["services0"]; 
$services["services1"]; 
$services["services2"]; 
$services["services3"]; 

И я хотел бы создать какой-то цикл, чтобы изменить их на:

$services[0]; 
$services[1]; 
$services[2]; 
$services[3]; 

Как бы вы идти об этом ? Не знаете, сколько ключей: пары значений у вас есть в массиве?

+1

Да, есть два прекрасных способа ... используя цикл 'for' или' foreach'. –

+0

Я понимаю оба понятия ... но я думал, может быть, я сначала получаю количество элементов, связанных с массивом, Затем создайте для цикла, начиная с нуля до длины массива. Внутри этого цикла создайте цикл foreach, который входит в каждый '$ key' и заменяет его текущей итерацией ... – hayonj

+0

Я уверен, что в этом проблема должна быть проще?? – hayonj

ответ

3

Самый простой способ сделать это и выбросить оригинальные ключи, чтобы просто запустить массив через array_values():

$new_array = array_values($old_array); 

Вы можете видеть из this demo, что в следующем примере:

$services = array(); 
$services["services0"] = 's0'; 
$services["services1"] = 's1'; 
$services["services2"] = 's2'; 
$services["services3"] = 's3'; 

$services = array_values($services); 

print_r($services); 

Производит этот массив:

Array 
(
    [0] => s0 
    [1] => s1 
    [2] => s2 
    [3] => s3 
) 
+0

... если только на самом деле он не сортируется по ключу, вам нужно ['ksort'] (http://php.net/manual/en/function.ksort.php). –

+0

Удивительно! Спасибо за этот удивительный один лайнер, о котором я никогда не слышал :) Мне нравится Stackoverflow и делиться с вами парнями ... Мы каждый день узнаем что-то новое! – hayonj

+0

Просто примечание: оно только * выглядит * подобно номерам в ключах (то есть 0-3). –

0

Попробуйте что-то вроде следующего кода:

$dummy_array = $services; 
$services = array(); 
foreach($dummy_array as $service) { 
    $services[] = $service; 

} 

Что происходит здесь является то, что вы услуги (Сброс переменных, но сохранив его первым), то вы петлю через сохраненную версию добавления значения обратно в массив. Здесь ключевой является линия $services[] = $service;. Это добавляет значение в конец существующего массива со стандартным ключом. т.е. 0, 1, 2, 3 и т. д. Это приводит к тому, что вы хотите удалить строковые ключи и заменить их стандартными ключами. Попробуйте и посмотрите, что вы получите. Успехов

+1

Очень здорово, я это хочу, я хотел бы поблагодарить вас за ваш вклад. Вы код прост и опрятен и делает то, что ожидалось, однако приведенный выше код - это один лайнер, а также аккуратная небольшая функция, которую я никогда не видел раньше, так что точка выходит на него, но мне тоже нравится ваша функция. – hayonj

+0

@hayonj Нет проблем. Я сильно использую синтаксис array [] в своей работе. Это пригодится для других типов проблем, поэтому это хороший инструмент для вашего набора. Я не уверен, почему другие голосуют за действительное решение. Странное место это, я думаю ... – usumoio

+1

Ваш ответ столь же важен, как и выше, я хотел бы помочь вам не проголосовать. Я не знаю, как действовать, но ваш код работает и не должен быть проголосован и может использоваться для многих других вещей, кроме того, что мне нужно для – hayonj