我有一个像这样的数组:
$columns = [
'id'=>'Id',
'status'=>'Status',
'created_at'=>'Created At'
];
我想用'status'=>'Status'
替换密钥和值'payment_status'=>'Payment status'
;我知道我可以使用unset($columns['status'])
按键删除元素,并将新元素添加到数组的结尾或开头。但是我想保持元素顺序,所以新元素应该在`id'之后添加。
我想到的一种方法是使用array_search()
获取密钥作为偏移量。然后使用array_merge()
与array_slice()
$offset = array_search('status', array_keys($columns));
$payment_status = $columns['status'];
$result = array_merge(array_slice($columns, 0, $offset), array('payment_status' => $payment_status), array_slice($columns, $offset, null));
unset($result['status']);
print_r($result);
您可以使用array_map仅遍历整个数组一次,并创建一个新的新列名称数组。
$myArray=array("id"=>123,"status"=>"no paid");
$otherArray = array();
$columns = array(
'id'=>'Id',
'status'=>'Status',
'created_at'=>'Created At'
);
array_map(function($column,$key) {
if(array_key_exists($key,$GLOBALS['columns']))
$GLOBALS['otherArray'][$GLOBALS['columns'][$key]]=$column;
else
$GLOBALS['otherArray'][$key]=$column;
return $column;
}, $myArray,array_keys($myArray));
print_r($otherArray);
这是demo
其中一种方法是,创建另一个数组并将其分配给现有数组,这样就可以替换原始数组。
$newarr = array(
'id' => 'Id',
'payment_status' => 'Payment status',
'created_at' => 'Created At');
$columns = $newarr;