2017-04-23 75 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