题一 字符串 ‘abbcccddddeef’ 输出成 a1b2c3d4e2f1 字符串计数
我的做法:把字符串用str_split($str,1) 转换成数组 然后键与值互换 array_flip函数 通过两个循环进行字母的比对记录个数
$str = 'abbcccddddeef';
getData($str);
function getData($str) {
$arr = str_split($str,1);
$data = array_flip($arr);
// print_r($data);
// die;
foreach ($data as $k => $v) {
$data[$k] = 0;
foreach ($arr as $key => $value) {
if ($k==$value) {
$data[$k]++;
}
}
}
var_dump($data);
}
die;
/*结果:array (size=6)
'a' => int 1
'b' => int 2
'c' => int 3
'd' => int 4
'e' => int 2
'f' => int 1
*/
通过在网上查一些方法的到一个最简便的方法看完这个方法后我发现自己就是个傻子。
php提供了array_count_values()函数用于统计数组中所有值出现的次数。本函数返回一个数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数。
最佳做法:
$str = 'abbcccddddeef';
$arr = str_split($str);
$res = array_count_values($arr);
var_dump($res);die;
/*结果:array (size=6)
'a' => int 1
'b' => int 2
'c' => int 3
'd' => int 4
'e' => int 2
'f' => int 1
*/
题二 二维数组字段的排序 优先id 若id 相同用data排序
$arr = array(
array('id'=>1,'data'=>'a'),
array('id'=>3,'data'=>'c'),
array('id'=>2,'data'=>'b'),
array('id'=>2,'data'=>'a')
);
$id = $data = array();
foreach($arr as $key => $value){
$id[$key] = $value['id'];
$data[$key] = $value['data'];
}
array_multisort($id, SORT_ASC, $data, SORT_DESC, $arr);
print_r($arr);
die;
题三 数字字母转换
1=>A 2=>B 3=>C…Z=>26 +=>‘ ’(空格)
eg:
numbersToLetters(‘20 5 19 20+4 15 13 5’); 输出 TEST DOME
分析: A字母是ascii码65开始的 a字母是97 将数字1转换为A的过程用到两个函数strtoupper(chr(v a l u e + 64 ) ) c h r 函 数 从 指 定 的 A S C I I 值 返 回 字 符 对 应 的 o r d ( ) 函 数 返 回 字 符 串 的 首 个 字 符 的 A S C I I 值 。 s t r t o u p p e r ( ) 函 数 把 字 符 串 转 换 为 大 写 。 加 这 个 函 数 是 为 了 双 保 险 c h r ( value+64)) chr 函数从指定的 ASCII 值返回字符 对应的 ord() 函数返回字符串的首个字符的 ASCII 值。 strtoupper() 函数把字符串转换为大写。 加这个函数是为了双保险chr(value+64))chr函数从指定的ASCII值返回字符对应的ord()函数返回字符串的首个字符的ASCII值。strtoupper()函数把字符串转换为大写。加这个函数是为了双保险chr(value+64)已经是大写了 对应的strtolower() 函数把字符串转换为小写。
要注意 20+4 中间没有空格所以要在转成数组
class NumbersToText
{
public static function numbersToLetters($string)
{
try {
$arr = explode(' ',$string);
$str = '';
// print_r($arr);die;
foreach ($arr as $key => $value) {
if (is_numeric($value)) {
$str .= strtoupper(chr($value+64));
} else {
$arrT = explode('+',$value);
$str .= strtoupper(chr($arrT[0]+64)).' '.strtoupper(chr($arrT[0]+64));
}
}
return $str;
} catch (\Exception $e) {
echo "error";
}
}
}
echo NumbersToText::numbersToLetters('20 5 19 20+4 15 13 5');
die;
更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。
程序员编程交流QQ群:805358732
如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!