将PHP函数应用于数组中的特定键

将PHP函数应用于数组中的特定键,php,arrays,Php,Arrays,我正在编写一个脚本,用于处理从我无法控制的第三方web服务提交的数据。我需要清理一些用户提交的数据。具体来说,我需要遍历每个数组,并重新格式化所有的名字和姓氏,以确保它们正确大写(欧内斯特·海明威而不是欧内斯特·海明威) 我一直在使用ucwords(strtolower())来修复大小写,但我需要将该方法应用于存储在每个数组的first_name和last_name键中的所有值。还有其他我不想更改的字符串,只有first_name和last_name值。以下是该阵列的一个示例: Array (

我正在编写一个脚本,用于处理从我无法控制的第三方web服务提交的数据。我需要清理一些用户提交的数据。具体来说,我需要遍历每个数组,并重新格式化所有的名字和姓氏,以确保它们正确大写(欧内斯特·海明威而不是欧内斯特·海明威)

我一直在使用ucwords(strtolower())来修复大小写,但我需要将该方法应用于存储在每个数组的first_name和last_name键中的所有值。还有其他我不想更改的字符串,只有first_name和last_name值。以下是该阵列的一个示例:

Array 
(
    [authors] => Array
            (
                [0] => Array
                    (
                        [first_name] => Ernest
                        [last_name] => HEMINGWAY
                        [book] => Too many to mention, but I like the Sun Also Rises 
                [1] => Array
                    (
                        [first_name] => john
                        [last_name] => steinbeck
                        [book] => East of Eden
    )

    [actors] => Array
            (
                [0] => Array
                    (
                        [first_name] => jOhn
                        [last_name] => WAYNE
                        [occupation] => Just generally a bad dude. 
                [1] => Array
                    (
                        [first_name] => clint
                        [last_name] => eastwood
                        [occupation] => Go ahead. Make my day. 
    )
)
关于如何循环每个数组并将UCWORD(strtower())应用到第一个\u名称和最后一个\u名称值,有什么想法吗?有很多数组需要这个,所以我希望能够通过编程查找和格式化first_name和last_name值。数组格式需要是相同的后处理格式,只更改值

编辑:我确信,正如下面所建议的,array\u walk\u recursive是一种方法。我没能让它工作,但我确实创造了一种新的方法来完成这项工作。以下为参考:

protected function _fixCase(array $data)
{
    $newData = $data; 
    foreach  ($newData as $key => $value) {
        switch (true) {
            case stristr($key, 'first_name') || stristr($key, 'last_name'); 
                $newData[$key] = ucwords(strtolower($value)); 
                break; 
            default: 
                ''; 
        }
    }
    return $newData;
}
:


如果
$键
与您想要更改的匹配,这将更改在位的项(
&$item
)。

您可能需要查看
数组_walk _recursive
。回调函数中的第二个参数是键,因此在应用清理之前,只需检查该参数是否等于
first\u name
last\u name
。请记住,并非所有的名字都会以这种方式正确大写。这使得我的评论有些多余。。。有头脑的、伟大的、相似的东西;)谢谢你提供的信息。我无法让array\u walk\u递归运行,但我确信这是由于我自己的限制。我最终创建了一个可能不那么优雅的函数,但却完成了任务。
array_walk_recursive($array, function(&$item, $key) {
        if ($key === 'first_name' || $key === 'last_name') {
            $item = ucwords(strtolower($item));
        }
    }
);