如何在多维数组中重命名匿名键

时间:2017-03-09 20:30:44

标签: php arrays multidimensional-array

array:4 [▼
  0 => array:2 [▼
    0 => "chrysanthemum.jpg"
    1 => "http://site.loc/1"
  ]
  1 => array:2 [▼
    0 => "desert.jpg"
    1 => "http://site.loc/2"
  ]
  2 => array:2 [▼
    0 => "hydrangeas.jpg"
    1 => "http://site.loc/3"
  ]
  3 => array:2 [▼
    0 => "jellyfish.jpg"
    1 => "http://site.loc/4"
  ]
]

如何在每个数组中将0重命名为['img']和1到['link']?

试试这个:

foreach($data as $array){
            $array['img']=$array[0];
            unset($array[0]);
            $array['link']=$array[1];
            unset($array[1]);
        }

但它不起作用:c php有这项任务的功能吗?

2 个答案:

答案 0 :(得分:0)

您需要通过引用访问它,此时您只需更改数据副本而不更改数据。

foreach($data as &$array){
    $array['img'] = $array[0];
    $array['link'] = $array[1];
    unset($array[0], $array[1]);
}

答案 1 :(得分:0)

你有两种方法可以做到这一点。

第一个,只将&放在参数中:

foreach($data as &$array){
   $array['img']=$array[0];
   unset($array[0]);
   $array['link']=$array[1];
   unset($array[1]);
}

这将允许更改$array

另一种方法是使用array_map

$data = array_map(function($data) {
    return [
        'img' => $data['0'],
        'link' => $data['1']
    ];
}, $data);

响应:

array(4) {
  [0]=>
  array(2) {
    ["img"]=>
    string(17) "chrysanthemum.jpg"
    ["link"]=>
    string(17) "http://site.loc/1"
  }
  [1]=>
  array(2) {
    ["img"]=>
    string(10) "desert.jpg"
    ["link"]=>
    string(17) "http://site.loc/2"
  }
  [2]=>
  array(2) {
    ["img"]=>
    string(14) "hydrangeas.jpg"
    ["link"]=>
    string(17) "http://site.loc/3"
  }
  [3]=>
  array(2) {
    ["img"]=>
    string(13) "jellyfish.jpg"
    ["link"]=>
    string(17) "http://site.loc/4"
  }
}

在这两种情况下。