2013-06-02 5 views
0

Я пытаюсь применить ucfirst к словам в массиве, используя array_walk и анонимную функцию. Я хочу изменить значения «оригинального» массива $fruits. Поскольку я не могу использовать pass by reference, что вы можете порекомендовать мне для этого?array_walk и анонимная функция

<?php 

$fruits = array('apple', 'orange', 'banana', 'cherry'); 

array_walk($fruits, function($a) { 
     $fruits = ucfirst($a); 
}); 

var_dump($fruits); 

//results 

array(4) { 
    [0] => 
    string(5) "apple" 
    [1] => 
    string(6) "orange" 
    [2] => 
    string(6) "banana" 
    [3] => 
    string(6) "cherry" 
} 

ответ

3
array_walk(
    $fruits, 
    function(&$a) { 
     $a = ucfirst($a); 
    } 
); 
+0

Что такое & $ a в этом случае? Это ссылка на $ fruit? – dofores

+0

Нет, & $ a - ссылка на отдельную запись в массиве $ fruits –

0

Вы можете использовать цикл Еогеасп:

$fruits = array('apple', 'orange', 'banana', 'cherry'); 

foreach($fruits as $key => $value) 
{ 
    $fruits[$key] = ucfirst($value); 
} 
+1

Он ходит по причине. Я думаю, он знал бы foreach :) –

+0

@DaveChen true :) Я думаю, что я предпочитаю, чтобы Феликс Клингс отвечал! Тем не менее, для тех, кто наткнулся на этот пост, может быть, мой пригодится для них! –

5

array_map является лучшей функцией в этой ситуации.

$fruits = array_map('ucfirst', $fruits); 
+0

@str: Я думал, что вы можете напрямую передавать имена функций в новых версиях PHP, но это кажется невозможным. Благодаря! –

0
$allUpperCase = array_map(function($fruit){ 
    return ucfirst($fruit); 
}, $fruits);