2021-08-12PHP面试笔试题记录

1、编写函数function get_duplicate_num_array($in, $num),获取最大相同元素数组的返回结果数组

      其中,$in为输入数组,$num为相同数组元素的重复上限数值($num>=2)。

1-1、例如:$in = [1, 20, 20 ,37, 20, 45, 38, 38, 20, 22, 26, 28, 45, 45, 37, 37];

                    $out = [1, 20, 20, 37, 37 ,45, 45, 38, 38, 22, 26, 28];

                    // 相同的数组元素进行合并,保持原来数组元素的先后顺序

<?php
	$in = [1, 20, 20 ,37, 20, 45, 38, 38, 20, 22, 26, 28, 45, 45, 37, 37];

	// $out = [1, 20, 20, 37, 37 ,45, 45, 38, 38, 22, 26, 28];

	function get_duplicate_num_array($in, $num) {
		$uni = [];
		$out = [];
		$length = count($in);
		
		for($i = 0; $i < $length - 1; $i++) {
			$cur_data = $in[$i];
			if(!in_array($cur_data, $uni)) {
				$uni[] = $cur_data;
				$out[] = $cur_data;
				
				// 相同数组元素的重复次数的初值
				$same_num_i = 0;
				// 查询与当前数据值相同的其他数组元素值
				for($j = $i + 1; $j < $length; $j++) {
					if($in[$j] == $cur_data && ++$same_num_i < $num) {
						$out[] = $cur_data;
					}
				}
			}
		}
	
		return $out;
	}

	$out = get_duplicate_num_array($in, 2);
	print_r($out);
    /*
    Array
    (
        [0] => 1
        [1] => 20
        [2] => 20
        [3] => 37
        [4] => 37
        [5] => 45
        [6] => 45
        [7] => 38
        [8] => 38
        [9] => 22
        [10] => 26
        [11] => 28
    )
    */
?>

1-2、例如:$in = [1, 20, 20 ,37, 20, 45, 38, 38, 20, 22, 26, 28, 45, 45, 37, 37];

                    $out = [1, 20, 20, 37, 45, 38, 38, 22, 26, 28, 45, 37];

                    // 相同的数组元素不进行合并,保持原来数组元素的先后顺序

<?php
	$in = [1, 20, 20 ,37, 20, 45, 38, 38, 20, 22, 26, 28, 45, 45, 37, 37];

	$out = [1, 20, 20, 37, 45, 38, 38, 22, 26, 28, 45, 37];

	function get_duplicate_num_array($in, $num) {
		$length = count($in);
		
		for($i = 0; $i < $length - 1; $i++) {
			$cur_data = $in[$i];
				
			// 相同数组元素的重复次数的初值
			$same_num_i = 0;
			// 查询与当前数据值相同的其他数组元素值
			for($j = $i + 1; $j < $length; $j++) {
				if($in[$j] == $cur_data && ++$same_num_i >= $num) {
					unset($in[$j]);
				}
			}
		}
	
		return $in;
	}

	$out = get_duplicate_num_array($in, 2);
	print_r($out);
    /*
    Array
    (
        [0] => 1
        [1] => 20
        [2] => 20
        [3] => 37
        [5] => 45
        [6] => 38
        [7] => 38
        [9] => 22
        [10] => 26
        [11] => 28
        [12] => 45
        [14] => 37
    )
    */
?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值