2017-04-23 206 views
1

我的代碼已經通過$ _FILES數組並取消設置了一些文件。該數組現在具有不以零開始並且也沒有順序的鍵。php更改多維數組的鍵

[userfile] => Array 
    (
     [name] => Array 
      (
       [2] => IMG_20170325_124043610_HDR.jpg 
       [3] => video_icon.png 
       [5] => watersports.gif 
       [7] => IMG_20170325_153726906_HDR.jpg 
      ) 

我想重新命名從零依次啓動鍵,就像這樣:

[userfile] => Array 
    (
     [name] => Array 
      (
       [0] => IMG_20170325_124043610_HDR.jpg 
       [1] => video_icon.png 
       [2] => watersports.gif 
       [3] => IMG_20170325_153726906_HDR.jpg 
      ) 

我不想改變[userfile的] [名]或鍵值任何其他非數字鍵。有這個功能嗎?我想沿着這些線路做一些事情:

// FILE COUNT IS PROVIDED BY CODE ABOVE 

// Is $num equal to $fileCount? 
$num = 0; 

// Change the value of the key through iteration 
while ($num < $fileCount) { 
    // need a built in function that allows the key change 
    **reset_key**($_FILES['userfile']['name'][$num]); 
    **reset_key**($_FILES['userfile']['type'][$num]); 
    **reset_key**($_FILES['userfile']['tmp_name'][$num]); 
    **reset_key**($_FILES['userfile']['error'][$num]); 
    **reset_key**($_FILES['userfile']['size'][$num]); 
} 
$num++; 

這甚至正確的方法,或者我應該被人在這裏想什麼?非常感謝您的投入!

乾杯,

沙克爾頓

+0

那麼,爲什麼要重命名的鍵? –

+0

我真的不知道爲什麼,但是如果你想重置鍵,你可以像'$ arr = array_values($ arr);'那樣做。例如:[https://3v4l.org/K5evY](https://3v4l.org/K5evY) – FirstOne

+1

[重置數組元素在PHP中的鍵?](http://stackoverflow.com/questions/10492839/reset-keys-of-array-elements-in-php) –

回答

0

有沒有需要重置鍵。您可以將$_FILES數據用一個簡單的key => value的foreach和搶值具有相同key從其他子陣迭代:

foreach ($_FILES['userfile']['name'] as $key => $value) { 
    echo 'Name: ', $value; 
    echo 'Tmp_name: ',$_FILES['userfile']['tmp_name'][$key]; 
    echo 'Size: ', $_FILES['userfile']['size'][$key]; 
} 

如果你仍然想重置子陣的鑰匙,然後用array_values,但要小心 - 你需要所有子陣列中的復位值爲$_FILES['userfile']name,tmp_name,error,size,type

0

使用array_values()

代碼:

<?php 

$file= array(

      $arr1 = array 
      (
       23 => 'IMG_20170325_124043610_HDR.jpg', 
       4 => 'video_icon.png', 
       55 => 'watersports.gif', 
       7 => 'IMG_20170325_153726906_HDR.jpg' 
      ), 

     $arr2 = array 
      (
       23 => 'IMG_20170325_124043610_HDR.jpg', 
       43 => 'video_icon.png', 
       54 => 'watersports.gif', 
       7 => 'IMG_20170325_153726906_HDR.jpg' 
      ) 

      ); 


for ($i=0; $i<count($file); $i++){ 

    $arr=$file[$i]; 
    $arr= array_values($arr); 
    sort($arr); 

    foreach ($arr as $key => $val) { 
     echo "$key = $val\n"; 
    } 
    } 

?> 
0

array_walk()array_values()一個班輪救援:

array_walk($FILES,function(&$v){$v["userfile"]["name"]=array_values($v["userfile"]["name"]);}); 

array_walk()故障:

array_walk(
    // changed $_FILES to $FILES for testing only 
    $FILES, // this is the input array to iterate 
    function(&$v){ // $v is each 1st level subarray in $FILES 
     // ^-- & means alter each original subarray from $FILES 
     $v["userfile"]["name"]= // only redeclare/overwrite the subarray's subarray called "name" 
      array_values($v["userfile"]["name"]); // create a new array with zero-indexed keys and the same values as the original subarray's subarray 
    } 
); 

如果使用此數組作爲輸入:

$FILES=array(
    array(
     "userfile" => array(
      "name" => array(
       2 => "IMG_20170325_124043610_HDR.jpg", 
       3 => "video_icon.png", 
       5 => "watersports.gif", 
       7 => "IMG_20170325_153726906_HDR.jpg" 
      ) 
     ) 
    ), 
    array(
     "userfile" => array(
      "name" => array(
       9 => "IMG_20170325_124043610_HDR.jpg", 
       13 => "video_icon.png", 
       55 => "watersports.gif", 
       97 => "IMG_20170325_153726906_HDR.jpg" 
      ) 
     ) 
    ), 
    array(
     "userfile" => array(
      "name" => array(
       1 => "IMG_20170325_124043610_HDR.jpg", 
       88 => "video_icon.png", 
       7 => "watersports.gif", 
       10 => "IMG_20170325_153726906_HDR.jpg" 
      ) 
     ) 
    ) 
); 

array_walk()var_export($FILES);將輸出:

array (
    0 => 
    array (
    'userfile' => 
    array (
     'name' => 
     array (
     0 => 'IMG_20170325_124043610_HDR.jpg', 
     1 => 'video_icon.png', 
     2 => 'watersports.gif', 
     3 => 'IMG_20170325_153726906_HDR.jpg', 
    ), 
    ), 
), 
    1 => 
    array (
    'userfile' => 
    array (
     'name' => 
     array (
     0 => 'IMG_20170325_124043610_HDR.jpg', 
     1 => 'video_icon.png', 
     2 => 'watersports.gif', 
     3 => 'IMG_20170325_153726906_HDR.jpg', 
    ), 
    ), 
), 
    2 => 
    array (
    'userfile' => 
    array (
     'name' => 
     array (
     0 => 'IMG_20170325_124043610_HDR.jpg', 
     1 => 'video_icon.png', 
     2 => 'watersports.gif', 
     3 => 'IMG_20170325_153726906_HDR.jpg', 
    ), 
    ), 
), 
) 
+0

Hello Mickmackusa, 非常感謝您的意見。我知道還有其他方法可以解決這個問題,我試圖弄清楚PHP引擎如何使用不同的方法運行。我花了好幾天的時間進行實驗,盡我所能地想,並測試以查看結果。我知道我將使用很多數組和數組函數 - 而且我們在課堂上幾乎沒有做過這些。 令我驚訝的是,看看它是如何工作的。我可以在許多項目中使用這種方法。我從來沒有能夠直觀地看到這種單線救援。再次感謝! 乾杯, Rick – shackleton

+0

@shackleton我添加了'array_walk()'的細目來幫助解釋它是如何工作的 - 希望這會讓我和你的其他SO讀者更清楚地回答。 – mickmackusa