2013-05-03 4 views
0

Я никогда использовалиИзменить содержимое массива

unset($quotes_array[0]['methods'][0]); 
$quotes_array[0]['methods'] = array_values($quotes_array[0]['methods']); 

, чтобы удалить первый элемент массива, но форма выбора, где используется массив больше не правильно реагирует на кнопку радио, выбранного пользователем. Исходный массив выглядит следующим образом:

Array 
(
[0] => Array 
    (
     [id] => advshipper 
     [methods] => Array 
      (
       [0] => Array 
        (
         [id] => 1-0-0 
         [title] => Trade Shipping 
         [cost] => 20 
         [icon] => 
         [shipping_ts] => 
         [quote_i] => 0 
        ) 

       [1] => Array 
        (
         [id] => 2-0-0 
         [title] => 1-2 working days 
         [cost] => 3.2916666666667 
         [icon] => 
         [shipping_ts] => 
         [quote_i] => 1 
        ) 

       [2] => Array 
        (
         [id] => 4-0-0 
         [title] => 2-3 working days 
         [cost] => 2.4916666666667 
         [icon] => 
         [shipping_ts] => 
         [quote_i] => 2 
        ) 

       [3] => Array 
        (
         [id] => 8-0-0 
         [title] => Click & Collect 
         [cost] => 0 
         [icon] => 
         [shipping_ts] => 
         [quote_i] => 3 
        ) 

      ) 

     [module] => Shipping 
     [tax] => 20 
    ) 

) 

И модифицированный массив выглядит следующим образом:

Array 
(
[0] => Array 
    (
     [id] => advshipper 
     [methods] => Array 
      (
       [0] => Array 
        (
         [id] => 2-0-0 
         [title] => 1-2 working days 
         [cost] => 3.2916666666667 
         [icon] => 
         [shipping_ts] => 
         [quote_i] => 1 
        ) 

       [1] => Array 
        (
         [id] => 4-0-0 
         [title] => 2-3 working days 
         [cost] => 2.4916666666667 
         [icon] => 
         [shipping_ts] => 
         [quote_i] => 2 
        ) 

       [2] => Array 
        (
         [id] => 8-0-0 
         [title] => Click & Collect 
         [cost] => 0 
         [icon] => 
         [shipping_ts] => 
         [quote_i] => 3 
        ) 

      ) 

     [module] => Shipping 
     [tax] => 20 
    ) 

) 

Я подозреваю, что проблема вызвана тем, что в модифицированном массиве [quote_i] Теперь начинается на 1, а не 0, как в оригинале. Поэтому у меня есть [quote_i] как 1, 2, затем 3, но это должно быть 0, 1, затем 2.

Я попытался использовать array_walk, чтобы исправить это, но не был успешным.

Любые предложения по решению этого вопроса?

+0

ли это то, что вы ищете? http://stackoverflow.com/questions/5217721/how-to-remove-array-element-and-then-re-index-array – Juampi

ответ

1

Хитрость в основном будет исправить quote_i

$counter = 0; 
foreach ($quotes_array[0]['methods'] as $key => $value) 
{ 
    $quotes_array[0]['methods'][$key]['quote_i'] = $counter; 
    $counter++; 
} 
+0

Идеальное решение. Выполнение этого способа будет исправлять ['quote_i'], однако многие из них находятся в массиве. Благодарю. Еще один день, когда я узнал что-то новое. –

0

Использование array_walk с примером кода, который должен соответствовать ваш случай использования

<?php 
foreach ($quotes_array[0]['methods'] as $a) { 
    $a = array(
     array('quote_i' => 1), 
     array('quote_i' => 2), 
     array('quote_i' => 3) 
     ); 

    array_walk($a, function(&$item, $key) { 
     $item['quote_i'] = $item['quote_i'] - 1; 
    }); 

    var_dump($a); 

    // array([0] => array('quote_i' => 0), [1] => array('quote_i' => 1), [2] => array('quote_id' => 2)) 
} 
Смежные вопросы