Thay vì sử dụng các vòng lặp, bạn luôn có thể san bằng để chuỗi với json_encode()
, thực hiện một sự thay thế chuỗi, sau đó json_decode()
trở lại một mảng:
function replaceKey($array, $old, $new)
{
//flatten the array into a JSON string
$str = json_encode($array);
// do a simple string replace.
// variables are wrapped in quotes to ensure only exact match replacements
// colon after the closing quote will ensure only keys are targeted
$str = str_replace('"'.$old.'":','"'.$new.'":',$str);
// restore JSON string to array
return json_decode($str, TRUE);
}
Bây giờ điều này không kiểm tra xung đột với các khóa đã tồn tại (dễ đủ để thêm kiểm tra so sánh chuỗi) và nó có thể không phải là giải pháp tốt nhất cho các thay thế đơn lẻ trong mảng lớn. phần tốt đẹp về làm phẳng mảng thành một chuỗi thay thế là nó có hiệu quả làm cho đệ quy thay thế kể từ trận đấu ở bất kỳ độ sâu đều được thay thế trong một pass:
$arr = array(
array(
'name' => 'Steve'
,'city' => 'Los Angeles'
,'state' => 'CA'
,'country' => 'USA'
,'mother' => array(
'name' => 'Jessica'
,'city' => 'San Diego'
,'state' => 'CA'
,'country' => 'USA'
)
)
,array(
'name' => 'Sara'
,'city' => 'Seattle'
,'state' => 'WA'
,'country' => 'USA'
,'father' => array(
'name' => 'Eric'
,'city' => 'Atlanta'
,'state' => 'GA'
,'country' => 'USA'
,'mother' => array(
'name' => 'Sharon'
,'city' => 'Portland'
,'state' => 'OR'
,'country' => 'USA'
)
)
)
);
$replaced = replaceKey($arr,'city','town');
print_r($replaced);
đầu ra
Array
(
[0] => Array
(
[name] => Steve
[town] => Los Angeles
[state] => CA
[country] => USA
[mother] => Array
(
[name] => Jessica
[town] => San Diego
[state] => CA
[country] => USA
)
)
[1] => Array
(
[name] => Sara
[town] => Seattle
[state] => WA
[country] => USA
[father] => Array
(
[name] => Eric
[town] => Atlanta
[state] => GA
[country] => USA
[mother] => Array
(
[name] => Sharon
[town] => Portland
[state] => OR
[country] => USA
)
)
)
)
cách tiếp cận Khá thú vị, trong tôi ý kiến nó sẽ là tốt hơn để vượt qua mảng như tài liệu tham khảo. – Nazariy
@Nazariy: php sẽ không sao chép thông số ban đầu cho đến khi nó được sửa đổi (được gọi là copy-on-write, COW). Từ quan điểm này, tôi không thấy bất kỳ lợi thế nào khi sử dụng các tham chiếu trong trường hợp cụ thể này – zerkms
Cảm ơn zerkms, một cách tiếp cận thanh lịch. –