如何仅提取数组键的一部分(字符串)&改变它的情况

时间:2015-04-12 04:32:49

标签: php arrays string algorithm associative-array

我有一个名为$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'
);

我只需从密钥和密钥中提取姓氏。将它们打印为大写。

我将如何在世界范围内这样做?

4 个答案:

答案 0 :(得分:1)

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

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

如果你的名字叫“Mary Jo”或“Bobby Jo”作为名字,这可能会破坏。在这种情况下,如果发生这种情况,您可能需要进行一些更改。

编辑。我实现了end函数以确保姓氏。

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

答案 1 :(得分:0)

您可以通过多种方式使用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

答案 2 :(得分:0)

由于演员姓名属于键,因此请使用foreach,然后您可以使用strrchr + substr来获取姓氏:

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

Sample Output

答案 3 :(得分:0)

这应该适合你,好看又紧凑:

(这里我使用array_keys()遍历所有数组键,然后我用explode()每个键作为分隔符的空格。然后访问我在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