Làm cách nào tôi có thể chuyển đổi tất cả các giá trị trong một mảng thành chữ thường trong PHP?
Một cái gì đó như thế array_change_key_case
nào?
Làm cách nào tôi có thể chuyển đổi tất cả các giá trị trong một mảng thành chữ thường trong PHP?
Một cái gì đó như thế array_change_key_case
nào?
Câu trả lời:
sử dụng array_map()
:
$yourArray = array_map('strtolower', $yourArray);
Trong trường hợp bạn cần viết thường mảng lồng nhau (bởi Yahya Uddin ):
$yourArray = array_map('nestedLowercase', $yourArray);
function nestedLowercase($value) {
if (is_array($value)) {
return array_map('nestedLowercase', $value);
}
return strtolower($value);
}
mb_strtolower
$yourArray = array_map('mb_strtolower', $yourArray);
Tôi vừa kiểm tra và nó hoạt động cho Cyrillic
Chỉ để hoàn thiện: bạn cũng có thể sử dụng array_walk
:
array_walk($yourArray, function(&$value)
{
$value = strtolower($value);
});
Từ các tài liệu PHP:
Nếu gọi lại cần phải làm việc với các giá trị thực của mảng, chỉ định tham số đầu tiên của gọi lại làm tham chiếu. Sau đó, mọi thay đổi được thực hiện cho các phần tử đó sẽ được thực hiện trong chính mảng ban đầu.
Hoặc trực tiếp qua foreach
vòng lặp bằng cách sử dụng tài liệu tham khảo :
foreach($yourArray as &$value)
$value = strtolower($value);
Lưu ý rằng hai phương thức này thay đổi mảng "tại chỗ", trong khi array_map
tạo và trả về một bản sao của mảng, có thể không được mong muốn trong trường hợp mảng rất lớn.
array_walk_recursive()
. Cũng mb_strtolower()
bởi vì Thế giới là đa ngôn ngữ.
Bạn có thể sử dụng mảng_map (), đặt tham số đầu tiên thành 'strtolower' (bao gồm cả dấu ngoặc kép) và tham số thứ hai thành $ low_case_array.
Nếu bạn muốn viết thường tất cả các giá trị trong một mảng lồng nhau , hãy sử dụng mã sau đây:
function nestedLowercase($value) {
if (is_array($value)) {
return array_map('nestedLowercase', $value);
}
return strtolower($value);
}
Vì thế:
[ 'A', 'B', ['C-1', 'C-2'], 'D']
sẽ trở lại:
[ 'a', 'b', ['c-1', 'c-2'], 'd']
mảng_change_value_case
bằng cách tiếp tục
function array_change_value_case($array, $case = CASE_LOWER){
if ( ! is_array($array)) return false;
foreach ($array as $key => &$value){
if (is_array($value))
call_user_func_array(__function__, array (&$value, $case ) ) ;
else
$array[$key] = ($case == CASE_UPPER )
? strtoupper($array[$key])
: strtolower($array[$key]);
}
return $array;
}
$arrays = array ( 1 => 'ONE', 2=> 'TWO', 3 => 'THREE',
'FOUR' => array ('a' => 'Ahmed', 'b' => 'basem',
'c' => 'Continue'),
5=> 'FIVE',
array('AbCdeF'));
$change_case = array_change_value_case($arrays, CASE_UPPER);
echo "<pre>";
print_r($change_case);
Array ( [1] => one [2] => two [3] => three [FOUR] => Array ( [a] => ahmed [b] => basem [c] => continue ) [5] => five [6] => Array ( [0] => abcdef ) )
Giải pháp AIO / đệ quy / Unicode | UTF-8 | Multibyte được hỗ trợ!
/**
* Change array values case recursively (supports utf8/multibyte)
* @param array $array The array
* @param int $case Case to transform (\CASE_LOWER | \CASE_UPPER)
* @return array Final array
*/
function changeValuesCase ( array $array, $case = \CASE_LOWER ) : array {
if ( !\is_array ($array) ) {
return [];
}
/** @var integer $theCase */
$theCase = ($case === \CASE_LOWER)
? \MB_CASE_LOWER
: \MB_CASE_UPPER;
foreach ( $array as $key => $value ) {
$array[$key] = \is_array ($value)
? changeValuesCase ($value, $case)
: \mb_convert_case($array[$key], $theCase, 'UTF-8');
}
return $array;
}
Thí dụ:
$food = [
'meat' => ['chicken', 'fish'],
'vegetables' => [
'leafy' => ['collard greens', 'kale', 'chard', 'spinach', 'lettuce'],
'root' => ['radish', 'turnip', 'potato', 'beet'],
'other' => ['brocolli', 'green beans', 'corn', 'tomatoes'],
],
'grains' => ['wheat', 'rice', 'oats'],
];
$newArray = changeValuesCase ($food, \CASE_UPPER);
Đầu ra
[
'meat' => [
0 => 'CHICKEN'
1 => 'FISH'
]
'vegetables' => [
'leafy' => [
0 => 'COLLARD GREENS'
1 => 'KALE'
2 => 'CHARD'
3 => 'SPINACH'
4 => 'LETTUCE'
]
'root' => [
0 => 'RADISH'
1 => 'TURNIP'
2 => 'POTATO'
3 => 'BEET'
]
'other' => [
0 => 'BROCOLLI'
1 => 'GREEN BEANS'
2 => 'CORN'
3 => 'TOMATOES'
]
]
'grains' => [
0 => 'WHEAT'
1 => 'RICE'
2 => 'OATS'
]
]
Bạn không nói nếu mảng của bạn là đa chiều. Nếu có, Array_map sẽ không hoạt động một mình. Bạn cần một phương thức gọi lại. Đối với mảng nhiều chiều, hãy thử mảng_change_key_case .
// You can pass array_change_key_case a multi-dimensional array,
// or call a method that returns one
$my_array = array_change_key_case(aMethodThatReturnsMultiDimArray(), CASE_UPPER);