php更改多维数组的键

时间:2017-04-23 19:04:48

标签: php arrays

我的代码已通过$ _FILES数组并取消设置了许多文件。现在,阵列的键不会从零开始,也不按顺序排列。

[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] [name]或任何其他非数字键的键值。这有功能吗?我想沿着这些方向做点什么:

// 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++;

这是否是正确的方法,还是我应该在这里尝试别的东西?非常感谢您的投入!

干杯,

沙克尔顿

3 个答案:

答案 0 :(得分:0)

无需重置密钥。您可以使用简单的$_FILES foreach迭代key => value数据,并使用与其他子数组相同的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,{{1 }},tmp_nameerrorsize

答案 1 :(得分: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";
    } 
  }

?>

答案 2 :(得分: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',
      ),
    ),
  ),
)