如何仅提取数组键(字符串)的一部分并更改其大小写

How extract only a part of a array key (string) & change its case

我有一个名为 $Bond 的数组:

$Bond = array (
    'Sean Connery' => 'Dr. No',
    'George Lazenby' => 'On Her Majesty\'s Secret Service',
    'Roger Moore' => 'Live and Let Die',
    'Timothy Dalton' => 'The Living Daylights',
    'Pierce Brosnan' => 'GoldenEye',
    'Daniel Craig' => 'Casino Royal'
);

我只需要从键中提取姓氏并将它们打印为大写。

我到底该怎么做?

您可以按照几种方法使用 array_keys() 创建一个键数组,然后使用 for() 遍历您的键数组,用 explode() 拆分名称并转换将姓氏 (end($info)) 设为 strtoupper()。见代码:

<?php

    $Bond = array (
    'Sean Connery' => 'Dr. No',
    'George Lazenby' => 'On Her Majesty\'s Secret Service',
    'Roger Moore' => 'Live and Let Die',
    'Timothy Dalton' => 'The Living Daylights',
    'Pierce Brosnan' => 'GoldenEye',
    'Daniel Craig' => 'Casino Royal'
    );

$array_keys = array_keys($Bond);

for($i = 0; $i < count($array_keys); $i++) {
    $info = explode(' ', $array_keys[$i]);
    echo strtoupper(end($info)) . "<br>\n";
}
?>

或者您可以使用 foreach() 遍历您的数组,将名称与 explode() 分开,然后将姓氏 (end($info)) 转换为带有 strtoupper() 的大写字母像这样:

<?php

    $Bond = array (
    'Sean Connery' => 'Dr. No',
    'George Lazenby' => 'On Her Majesty\'s Secret Service',
    'Roger Moore' => 'Live and Let Die',
    'Timothy Dalton' => 'The Living Daylights',
    'Pierce Brosnan' => 'GoldenEye',
    'Daniel Craig' => 'Casino Royal'
    );

foreach($Bond as $key => $value) {
    $info = explode(' ', $key);
    echo strtoupper(end($info)) . "<br>\n";
}
?>

两种情况下的输出:

CONNERY
LAZENBY
MOORE
DALTON
BROSNAN
CRAIG

这将遍历每个项目并为您提供姓氏。

foreach($box as $k=>$v){
  $lastName = explode(' ',$k)[1];
  echo strtoupper($lastName);
}

如果有人的名字像 "Mary Jo" 或 "Bobby Jo",这可能会中断。在这种情况下,如果要发生这种情况,您可能必须进行一些更改。

编辑。我实现了结束功能以确保姓氏。

foreach($box as $k=>$v){
  $lastName = explode(' ',$k);
  echo strtoupper(end($lastName));
}

因为演员名字落在键上,使用foreach,那么你可以使用strrchr + substr来获取姓氏:

foreach($Bond as $name => $movie) {
    $last = strtoupper(substr(strrchr($name, ' '), 1));
    echo $last, '<br/>';
}

Sample Output

这应该适合你,漂亮而紧凑:

(这里我遍历所有数组键 array_keys(), where I then explode() each key by a space as delimiter. And then access the last element which I return in strtoupper() 大小写)

<?php

    $lastNamesUpper = array_map(function($v){
        return strtoupper(explode(" ", $v)[substr_count($v, " ")]);
    }, array_keys($Bond));


    foreach($lastNamesUpper as $v)
        echo "$v<br>";

?>

输出:

CONNERY
LAZENBY
MOORE
DALTON
BROSNAN
CRAIG