Bir dizideki tüm değerleri PHP'de küçük harfe nasıl dönüştürebilirim?
Gibi bir şey array_change_key_case
?
Bir dizideki tüm değerleri PHP'de küçük harfe nasıl dönüştürebilirim?
Gibi bir şey array_change_key_case
?
Yanıtlar:
kullanım array_map()
:
$yourArray = array_map('strtolower', $yourArray);
Küçük harfli iç içe diziye ihtiyaç duymanız durumunda ( Yahya Uddin tarafından ):
$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);
Az önce kontrol ettim ve Kiril için çalıştı
Tamlık için: Ayrıca şunları da kullanabilirsiniz array_walk
:
array_walk($yourArray, function(&$value)
{
$value = strtolower($value);
});
PHP belgelerinden:
Geri çağırmanın dizinin gerçek değerleriyle çalışması gerekiyorsa, geri aramanın ilk parametresini başvuru olarak belirtin. Daha sonra, bu elemanlarda yapılan herhangi bir değişiklik orijinal dizinin kendisinde yapılacaktır.
Veya referansları kullanarak doğrudan foreach
döngü yoluyla :
foreach($yourArray as &$value)
$value = strtolower($value);
Bu iki yöntemin "yerinde" diziyi değiştirdiğini, oysa array_map
dizinin bir kopyasını oluşturup döndürdüğünü unutmayın; bu , çok büyük diziler olması durumunda istenmeyebilir.
array_walk_recursive()
. Ayrıca mb_strtolower()
Dünya çok dilli olduğu için.
İç içe geçmiş bir dizideki tüm değerleri küçük harfle yazmak isterseniz , aşağıdaki kodu kullanın:
function nestedLowercase($value) {
if (is_array($value)) {
return array_map('nestedLowercase', $value);
}
return strtolower($value);
}
Yani:
[ 'A', 'B', ['C-1', 'C-2'], 'D']
şunu döndürür:
[ 'a', 'b', ['c-1', 'c-2'], 'd']
array_change_value_case
devam ederek
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 ) )
AIO Solution / Recursive / Unicode | UTF-8 | Multibyte destekli!
/**
* 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;
}
Misal:
$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);
Çıktı
[
'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'
]
]
Dizinizin çok boyutlu olup olmadığını söylemiyorsunuz. Eğer öyleyse, array_map tek başına çalışmayacaktır. Bir geri arama yöntemine ihtiyacınız var. Çok boyutlu diziler için array_change_key_case'i deneyin .
// 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);
`$ Renk = dizi ('A' => 'Mavi', 'B' => 'Yeşil', 'c' => 'Kırmızı');
$ strtolower = array_map ('strtolower', $ Color);
$ strtoupper = array_map ('strtoupper', $ Renk);
print_r ($ strtolower); print_r ($ strtoupper); '
Ayrıca array_flip()
ve kombinasyonunu da kullanabilirsiniz array_change_key_case()
. Bu gönderiye bakın
array_flip()
yinelenen değerler içeriyorsa , çağrıdan sonra dizi verileri kaybolur .