面试题-PHP多个关联数组进行冒泡排序

2019年4月21日 0 条评论 184 次阅读 5 人点赞

就在前天晚上8点,我即将休息的时候,boss直聘的HR给我回了消息,很直接的问道:你的PHP基础大概有多好?能把下面这道题做出来给我看看么?

题目如图:

我的第一眼看下去,哇!这么简单,用冒泡排序不就直接解出来了么?赶紧起来把电脑开了,然后开始写了。。。

你们知道我说开始写了用。。。省略号干嘛么?我真的是服了,弄到凌晨两点,还没解出来,然后我开始休息了,第二天早起,我姐来看我来了,下午6点回到住所,开启了电脑又开始解这道题目,直到刚刚才解出来的,在这期间我发现了几点问题。

  1. PHP的关联数组是不能直接进行冒泡排序的,因为冒泡排序中有for循环,只有索引数组才能进行for循环,否则会报错。
  2. 我发现我真的蠢,我竟然妄想直接把数组中的值以array[$value]的方法直接写入方法中,哈哈哈,后面报错之后把自己蠢笑了。
  3. 其实我太依赖于写方法了,可能是学框架多了,其实PHP中有很多很好的内置函数可以去运用的。

来看看我的代码,和HR写的代码,虽然最后都能实现功能,但是代码的简洁渡是完全不同的。

我的代码:

<?php

$array_one = ['A' => '111', 'C' => '333'];
$array_two = ['B' => '222', 'E' => '555'];
$array_three = ['D' => '444', 'F' => '666'];

//将所有数组合到一起
$allarr = array_merge_recursive($array_one, $array_two, $array_three);

/**
 * 因为关联数组不能序列化,所以该方法去改为索引数组
 * @param  array  $arr         [待更改数组]
 * @return array  $newArr      [已更改好的数组]
 **/
function toIndexArr($arr) {
	$i = 0;
	foreach ($arr as $key => $value) {
		$newArr[$i] = $value;
		$i++;
	}
	return $newArr;
}

//将改为索引数组的值赋给一个新的变量
$arr1 = toIndexArr($allarr);

/**
 * 冒泡排序的方法
 * @param  array  $arr     [待排序数组]
 * @return array  $arr     [已排序好的数组]
 **/
function bubbleSorting(array $arr) {

	$length = count($arr);

	for ($i = 0; $i < $length - 1; $i++) {

		//做一个标记,如果在本次排序过程中,没有出现交换的情况,说明排序已经有序,可以直接跳出循环,减少不必要的比较
		$mark = 1;

		for ($j = 0; $j < ($length - $i - 1); $j++) {

			if ($arr[$j] > $arr[$j + 1]) {
				$mark = 0; //出现了交换情况,则将标记改为0
				$temp = $arr[$j];
				$arr[$j] = $arr[$j + 1];
				$arr[$j + 1] = $temp;
			}
		}
		if ($mark) {
			//$mark值未出现变化,排序已经有序,直接返回结果即可
			return $arr;
		}
	}
}

//使用冒泡排序的方法把更改好的索引数组进行排序
var_dump(bubbleSorting($arr1));

HR的代码:

<?php

$array_one = ['A' => '111', 'C' => '333'];
$array_two = ['B' => '222', 'E' => '555'];
$array_three = ['D' => '444', 'F' => '666'];

$new_array = array_merge($array_one, $array_two, $array_three);

var_dump($new_array);

echo '<hr />';

ksort($new_array);

foreach ($new_array as $x => $x_value) {
	echo "Key=" . $x . ", Value=" . $x_value;
	echo "<br>";
}

?>

结语:这个行业就是这样的,不断的去学习,有时候就算做不出,也要不耻下问去寻找这道题的解法,不然遇到一点难题就退缩还做毛线程序员,另外祝我早日寻找到心仪的工作!

梁桂锋

来自西京学院大三的小开发者。

文章评论(0)