笔试题

笔试题

这次笔试题可以说相当简单了,岗位主要应聘的是php,web,爬虫方向的,贴出题目,以及自己的解答吧。

第一题:下面代码只有在PHP7才能执行成功。在PHP5下,试使用array_map函数来代替array_column函数来实现上面的功能从而得到相同的$usernames返回值。

class User
{
    public $username;

    public function __construct(string $username)
    {
        $this->username = $username;
    }
}

$users = [
    new User('user 1'),
    new User('user 2'),
    new User('user 3'),
];

$usernames = array_column($users, 'username');

我的解答:

class User
{
    public $username;

    public function __construct(string $username)
    {
        $this->username = $username;
    }
}

$users = [
    new User('user 1'),
    new User('user 2'),
    new User('user 3'),
];

function username($v){
    return $v->username;
}
$usernames = array_map('username',$users);

第二题:写一个方法,把金额数字从一个字符串中提取出来,并且处理好欧元的格式(请注意小数点和逗号)。输入输出结果如下:

EUR 1.409,00 => 1409409,05 => 409.05409.50 => 409.5
CNY 1,000 => 1000

我的解答:

function transfer($value){

    if(!is_string($value)){
        return false;
    }

    $result=''; 
    $partterns='/(EUR|€|¥|CNY)(\s)*(\d+((\.|\,)\d+)*)/i';
    preg_match($partterns,$value,$matchs);
    if($matchs==null){
        return false;
    }

       $tmp_number=preg_split("/,|\./i",$matchs[3]);
       for($i=0;$i<count($tmp_number)-1;$i++){
           $result.=$tmp_number[$i];
       }
       $t=$tmp_number[count($tmp_number)-1];

       if($t!=="00" && $t!=="0" && $t!==""){
       	   if(strlen($t)>=3){
              $result.=$t;
           }else{
              if($t[strlen($t)-1]==="0"){
                 $t=$t[0];
              } 
              $result.=".".$t;
           }
       }
   
   return $result;
}

3、【算法题】实现函数 repeatedString(string $string, int $total): int
目标:计算重复字符个数。
例子–输入:

aba
10

表示将 aba 重复 n 次,使字串长度为 10,计算第一个字符串:a 出现的次数。
输出:

7

我的解答:

function repeatedString($string,$total){
    if(!is_string($string)){
        return 0;
    }
    if(!is_numeric($total)){
        return 0;
    }

   $s_len=strlen($string);
   if($s_len>$total){
       return 0; 
   }
   $count=1;
   $pos_count=array();
   $first_l=$string[0];
   $pos_count[0]=1;

   for($i=1;$i<$s_len;$i++){
       if($string[$i]===$first_l){
           $count++;
       }
	   $pos_count[$i]=$count;
   }
  $count=$count*(intval(floor($total/$s_len)));
  $count+=$pos_count[($total%$s_len)];

 return $count;
}

题目算简单,不过公司极客氛围浓厚,是个提升自己技术的好地方!想知道?自己去猜

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值