替换关联数组中的键和值并保持元素顺序

问题描述 投票:1回答:3

我有一个像这样的数组:

$columns = [
        'id'=>'Id',
        'status'=>'Status',
        'created_at'=>'Created At'
];

我想用'status'=>'Status'替换密钥和值'payment_status'=>'Payment status';我知道我可以使用unset($columns['status'])按键删除元素,并将新元素添加到数组的结尾或开头。但是我想保持元素顺序,所以新元素应该在`id'之后添加。

php arrays
3个回答
2
投票

我想到的一种方法是使用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);

0
投票

您可以使用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


0
投票

其中一种方法是,创建另一个数组并将其分配给现有数组,这样就可以替换原始数组。

$newarr = array(
'id' => 'Id',
'payment_status' => 'Payment status',
'created_at' => 'Created At');

$columns = $newarr;
© www.soinside.com 2019 - 2024. All rights reserved.