ฉันจะแปลงค่าทั้งหมดในอาร์เรย์เป็นตัวพิมพ์เล็กใน PHP ได้อย่างไร
บางอย่างเช่นarray_change_key_case
?
ฉันจะแปลงค่าทั้งหมดในอาร์เรย์เป็นตัวพิมพ์เล็กใน PHP ได้อย่างไร
บางอย่างเช่นarray_change_key_case
?
คำตอบ:
ใช้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);
}
mb_strtolower
$yourArray = array_map('mb_strtolower', $yourArray);
ฉันเพิ่งตรวจสอบและใช้งานได้กับซิริลลิก
เพื่อความสมบูรณ์: คุณสามารถใช้array_walk
:
array_walk($yourArray, function(&$value)
{
$value = strtolower($value);
});
จากเอกสาร PHP:
หากการเรียกกลับจำเป็นต้องทำงานกับค่าจริงของอาร์เรย์ให้ระบุพารามิเตอร์แรกของการโทรกลับเป็นการอ้างอิง จากนั้นการเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นกับองค์ประกอบเหล่านั้นจะเกิดขึ้นในอาร์เรย์ดั้งเดิมเอง
หรือโดยตรงผ่านforeach
ลูปโดยใช้การอ้างอิง :
foreach($yourArray as &$value)
$value = strtolower($value);
โปรดสังเกตว่าสองวิธีนี้เปลี่ยนอาร์เรย์ "ในตำแหน่ง" ในขณะที่array_map
สร้างและส่งคืนสำเนาของอาร์เรย์ซึ่งอาจไม่เป็นที่ต้องการในกรณีของอาร์เรย์ที่มีขนาดใหญ่มาก
array_walk_recursive()
สำหรับอาร์เรย์หลายมิติการใช้งาน ด้วยmb_strtolower()
เพราะโลกนี้พูดได้หลายภาษา
คุณสามารถใช้ array_map () ตั้งค่าพารามิเตอร์แรกเป็น 'strtolower' (รวมถึงเครื่องหมายคำพูด) และพารามิเตอร์ที่สองเป็น $ lower_case_array
หากคุณต้องการพิมพ์เล็กค่าทั้งหมดในอาร์เรย์ที่ซ้อนกันให้ใช้รหัสต่อไปนี้:
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']
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 ) )
array_map()
เป็นวิธีการที่ถูกต้อง strtolower()
แต่ถ้าคุณต้องการแปลงค่าอาร์เรย์ที่เฉพาะเจาะจงหรือค่าอาร์เรย์ทั้งหมดเพื่อพิมพ์เล็กหนึ่งโดยหนึ่งคุณสามารถใช้
for($i=0; $i < count($array1); $i++) {
$array1[$i] = strtolower($array1[$i]);
}
AIO Solution / Recursive / 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'
]
]
คุณไม่ได้บอกว่าอาร์เรย์ของคุณเป็นแบบหลายมิติหรือไม่ ถ้าเป็นเช่นนั้น 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);
`$ Color = array ('A' => 'น้ำเงิน', 'B' => 'เขียว', 'c' => 'แดง');
$ strtolower = array_map ('strtolower', $ สี);
$ strtoupper = array_map ('strtoupper', $ สี);
print_r ($ Strtolower); print_r ($ strtoupper); `