2013-09-10 3 views
0

У меня есть этот массивИзменить ключи массива ассоциативного массива

$the_posted = Array 
      (
    0 => Array 
     (
      0 => 1, 
      1 => 2, 
      2 => 3, 
      3 => 4, 
     ), 

    1 => Array 
     (
      0 => 5, 
      1 => 6, 
      2 => 7, 
      3 => 8, 
     ) 

); 

, ключи мне нужно modify.I пытается изменить ключи массива как

$all_array_keys = array_keys($the_posted); 

foreach (array_keys($the_posted) as $k=>$v) 
{ 
    $all_array_keys[$k]= rand(); 
} 

    echo '<pre>'; 
    print_r($all_array_keys); 
    echo "<hr/>"; 
    print_r($the_posted); 
    echo '<pre>'; 

я получаю этот результат

Array 
(
    [0] => 25642 
    [1] => 8731 
) 

Array 
(
    [0] => Array 
     (
      [0] => 1 
      [1] => 2 
      [2] => 3 
      [3] => 4 
     ) 

    [1] => Array 
     (
      [0] => 5 
      [1] => 6 
      [2] => 7 
      [3] => 8 
     ) 

) 

Изменение ключей не отражается в конечном массиве. Как я могу сделать эту работу ?.

+0

Какой результат вы хотите посмотреть? – JimL

+0

Возможный дубликат [В PHP, как вы меняете ключ элемента массива?] (Http://stackoverflow.com/questions/240660/in-php-how-do-you-change-the-key-of -an-array-element), [PHP Array Keys] (http://stackoverflow.com/questions/308703/php-change-array-keys). – rid

+1

какое имя у вас там .... –

ответ

1

Вы можете использовать следующий код:

foreach (array_keys($the_posted) as $k=>$v) 
{ 
    $new_key = rand(); 
    $new_posted[$new_key] = $the_posted[$v]; 
    unset($the_posted[$v]) 
} 

Здесь , мы создали новый массив $new_posted, который будет иметь данные с новыми ключами, такими как:

Array 
(
    [28228] => Array 
     (
      [0] => 1 
      [1] => 2 
      [2] => 3 
      [3] => 4 
     ) 

    [23341] => Array 
     (
      [0] => 5 
      [1] => 6 
      [2] => 7 
      [3] => 8 
     ) 

) 
+0

И если и только если вы ограничены памятью (возможно, у вас не так много выделенной памяти для PHP, а массив очень большой), вы также можете 'unset ($ the_posted [$ k])' на каждом итерации, которая сохранила бы тот же объем памяти, за счет производительности. Но если память не является проблемой, она должна быть значительно быстрее без 'unset()'. – rid

+0

@rid: согласился с вами. –

-1

Чтобы изменить ключ элемента, сделать что-то вроде этого:

$the_posted[$newkey] = $the_posted[$oldkey]; 
unset($the_posted[$oldkey]); 

Так что в вашем случае:

foreach ($the_posted as $k=>$v) 
{ 
    $newkey = rand(); 
    while(isset($the_posted[$newkey])) 
     $newkey = rand(); 
    $the_posted[$newkey] = $the_posted[$k]; 
    unset($the_posted[$k]); 
} 
+0

Правда. Я обновил код, чтобы исправить проблему. – Scalpweb

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