2010-12-12 2 views
1

Мой вопрос похож на этот одно-Не задано многомерное значение массива, порядок и возврат в Php?

PHP | Remove element from array with reordering?

... за исключением того, что, когда я вернусь в упорядоченный массив, я хочу ключи, чтобы начать с 1. Мой массив, однако, является многомерным. Из чтения комментариев в руководстве PhP о функции array_values ​​я понимаю, что с ключами происходит что-то странное (Carsten Milkau пишет: «Обратите внимание, что в многомерном массиве каждый элемент может быть идентифицирован с помощью последовательности ключей, то есть ключи, которые ведут к этому элементу. ')

Это меня озадачивает, так как кажется, что я больше не могу просто использовать цикл foreach для итерации по массиву и каждый раз добавлять 1 к значению ключа. Я бы очень признателен за помощь в этом, в противном случае я буду иметь, чтобы реализовать некоторые серьезно уродливые и многословный работу вокруг ... вот мой код:

// $orderedData contains, for example, $orderedData['image_data'][1]['code'] and $orderedData['image_data'][1]['caption'] etc. 

function remove_image($orderedData, $imageNo){ 
    unset($orderedData['image_data'][$imageNo]); 
    $newArray = array_values($orderedData['image_data']); 

    // Now I need to shift the keys of $newArray so that $newArray[0]['code'] becomes $newArray[1]['code'] etc. 

} 
+0

Когда я начал программировать я ненавидела, что отсчет начинается с 0 не с 1, со временем я привыкнуть к нему и нашел некоторый здравый смысл в нем. Также есть много преимуществ от начала отсчета от 0 даже при сохранении порядка записей в базе данных. – Nazariy

ответ

0

Вы можете сделать что-то вроде этого:

$i = 0; 
$new_array = array(); 
foreach($orderedData as $value) 
{ 
    ++$i; 
    $new_array[$i] = $value; 
} 
+0

Ах, простейший простой подход, не знаю, почему я об этом не думал! Я фактически изменил третью строку на foreach ($ orderedData ['image_data'] как $ value), так как это были только те значения, которые я получил после, но это работает отлично! Большое спасибо! – Inigo

0

Это должно удовлетворить ваши цели, добавить в нижней части этой функции:

array_unshift($newArray, array()); 
unset($newArray[0]); 
+0

Мне это нравится, но кажется, что-то вроде взломать, чтобы добавить что-то, а затем удалить его, поэтому я согласен с ответом стиу выше, но спасибо! – Inigo

+0

https://stackoverflow.com/questions/2172937/php-remove-element-from-array-with-reordering/47865489#47865489 –

Смежные вопросы