如何在 PHP 中将数组值转换为小写?
Posted
技术标签:
【中文标题】如何在 PHP 中将数组值转换为小写?【英文标题】:How to convert array values to lowercase in PHP? 【发布时间】:2012-06-16 00:44:27 【问题描述】:如何在 php 中将数组中的所有值转换为小写?
类似array_change_key_case
?
【问题讨论】:
【参考方案1】:使用array_map()
:
$yourArray = array_map('strtolower', $yourArray);
如果您需要小写嵌套数组(Yahya Uddin):
$yourArray = array_map('nestedLowercase', $yourArray);
function nestedLowercase($value)
if (is_array($value))
return array_map('nestedLowercase', $value);
return strtolower($value);
【讨论】:
@Vit 使用mb_strtolower
@user3841429 mb_strtolower 没有帮助。 PHP7.2.
@Vit 你是这样使用它的吗? $yourArray = array_map('mb_strtolower', $yourArray);
我刚刚检查过,它适用于西里尔文
@user3841429 我错过了一些东西。它确实适用于西里尔字母。给你点赞。【参考方案2】:
为了完整起见:你也可以使用array_walk
:
array_walk($yourArray, function(&$value)
$value = strtolower($value);
);
来自 PHP 文档:
如果回调需要使用数组的实际值,请将回调的第一个参数指定为引用。然后,对这些元素所做的任何更改都将在原始数组本身中进行。
或者直接通过foreach
loop使用references:
foreach($yourArray as &$value)
$value = strtolower($value);
请注意,这两种方法“就地”更改数组,而array_map
创建并返回数组的副本,这在数组非常大的情况下可能不理想。
【讨论】:
对于多维数组,使用array_walk_recursive()
。还有mb_strtolower()
,因为世界是多语言的。【参考方案3】:
您可以使用array_map(),将第一个参数设置为'strtolower'(包括引号),将第二个参数设置为$lower_case_array。
【讨论】:
【参考方案4】:如果您希望将 嵌套 数组中的所有值都小写,请使用以下代码:
function nestedLowercase($value)
if (is_array($value))
return array_map('nestedLowercase', $value);
return strtolower($value);
所以:
[ 'A', 'B', ['C-1', 'C-2'], 'D']
会返回:
[ 'a', 'b', ['c-1', 'c-2'], 'd']
【讨论】:
【参考方案5】:array_change_value_case
继续
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 ) )
【讨论】:
【参考方案6】:array_map()
是正确的方法。但是,如果您想将特定数组值或所有数组值一一转换为小写,您可以使用strtolower()
。
for($i=0; $i < count($array1); $i++)
$array1[$i] = strtolower($array1[$i]);
【讨论】:
【参考方案7】:$Color = array('A' => 'Blue', 'B' => 'Green', 'c' => 'Red');
$strtolower = array_map('strtolower', $Color);
$strtoupper = array_map('strtoupper', $Color);
print_r($strtolower);
print_r($strtoupper);`
【讨论】:
【参考方案8】:AIO 解决方案/递归/Unicode|UTF-8|支持多字节!
/**
* 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;
例子:
$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);
输出
[
'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'
]
]
【讨论】:
【参考方案9】:你没有说你的数组是否是多维的。如果是,array_map 将无法单独工作。你需要一个回调方法。对于多维数组,请尝试array_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);
【讨论】:
【参考方案10】:嗨,试试这个解决方案。简单使用php array map
function myfunction($value)
return strtolower($value);
$new_array = ["Value1","Value2","Value3" ];
print_r(array_map("myfunction",$new_array ));
输出Array ( [0] => value1 [1] => value2 [2] => value3 )
【讨论】:
【参考方案11】:您还可以使用array_flip()
和array_change_key_case()
的组合。见this post
【讨论】:
如果数组包含重复值,调用array_flip()
后数组数据丢失。以上是关于如何在 PHP 中将数组值转换为小写?的主要内容,如果未能解决你的问题,请参考以下文章