反转每个逗号分隔子字符串中的字符顺序

问题描述 投票:0回答:3

我正在做一项作业,了解如何获取以逗号分隔的文本字符串并反转各个单词并以相同的顺序返回单词。

输入示例:

a,my,foo,barn,bazza,foobar

预期输出:

a,ym,oof,nrab,azzab,raboof

这段代码可以做到这一点,但由于某种原因它没有将其作为字符串返回,我不明白。

<?php
function bassAckwards($input)
{
    // YOUR CODE HERE

    $commas = substr_count($input, ",");
    $NumWords = ($commas + 1);
    $words = array($input);
    for($x=0;$x<$NumWords;$x++)
    {
        $answer = array(strrev($words[$x]));
        $answer = implode(",",$answer);
        print $answer;
    }
}  
?>
php arrays string reverse delimited
3个回答
4
投票
function bassAckwards($str){
  $words = explode(',', $str);
  $reversedWords = array_map('strrev', $words);
  return implode(',', $reversedWords);
}

var_dump(bassAckwards('foo,bar,baz')); // string(11) "oof,rab,zab"

使用内置功能,省去一些麻烦。

  • explode

    make 'foo,bar,baz' => array('foo','bar','baz')
  • array_map
    &
    strrev

    使用
    strrev
    对数组的每个元素执行
    array_map
    (字符串反转)并返回[修改后的]数组。
  • implode

    将数组转换回 csv。

0
投票
$reversedWords = array();

// Explode by commas
$words = explode(',', $input);
foreach ($word in $words) {
    // For each word
    // Stack it, reversed, in the new array $reversedWords
    $reversedWords[] = strrev($word);
}

// Implode by commas
$output = implode(',', $reversedWords);

print $output;

0
投票

使用

preg_replace_callback()
允许在匹配时就地反转字符串。 该字符串仅被遍历一次。

代码:(演示

echo preg_replace_callback(
    '/[^,]+/',
    fn($m) => strrev($m[0]),
    'foo,bar,baz'
);
// oof,rab,zab

作为避免使用

strrev()
的心理练习,您可以编写一个递归脚本。 (演示)

function rreplace($string)
{
    return preg_replace_callback(
        '/([^,])([^,]*)([^,])/',
        fn($m) => $m[3] . rreplace($m[2]) . $m[1],
        $string
    );
}
echo rreplace('foo,barn,bazza,foobar');

嵌套函数调用相当优雅——这是最新的语法(从 PHP8.1 开始可调用第一类)。 演示

echo implode(
    ',',
    array_map(
        strrev(...),
        explode(',', $string)
    )
);

另一个(不是特别优雅):Demo

echo array_reduce(
    explode(',', 'foo,barn,bazza,foobar'),
    fn($csv, $v) => $csv . ($csv ? ',' : '') . strrev($v),
    ''
);
© www.soinside.com 2019 - 2024. All rights reserved.