奇怪的问题?php数组引用后值发生改变
<?php
$items = array('a','b','c');
foreach($items as &$item){
$item .= '4';
}
foreach($items as $item){
echo $item,PHP_EOL;
}
输出的结果是a4,b4,b4而非a4,bc4,c4为什么呢?
因为在第一个fro次循环最终结束后,$item的值为&items[2]。
而在第二个循环时,由于再次用了$item这个变量,会有变化:
第1次时,$item(即$itmes[2])的值成了$items[0],即a4,此时数组为('a4','b4','a4');
第2次时,$item(即$items[2])的值成了$i...
找出一组数据中差值分别为最多及最小的的两个数
本题解题思想:
排序必然是第一步,排完序之后,数组两端的基本就是相差最大的一组数据。
而相差最小的,就要把相邻的两个数组依次去相减,最后找到结果最小的一组即是答案
<?php
$r = [100,20,90,40,10,50,70,88,25.6,16];
foreach($r as &$v){ foreach($r as &$j){ if($v >= $j){ $tmp = $v; $v = $j; $j = $tmp; } }
}
print_r($r);
$max_arr = [$r[0], $r[count($r)-1]];
echo 'max:',$r[0],'-' - $r[count($r)-1],'=',$r[0] - $r[count($r)-1];
echo PHP_EOL;
$min = 0;
unset($v); // ...
不使用+运算符,编写一个函数,将2个数字相加
分析:这又是一道考察发散思维的很有意思的题目。当我们习以为常的东西被限制使用的时候,如何突破常规去思考,就是解决这个问题的关键所在。
看到的这个题目,我的第一反应是傻眼了,四则运算都不能用,那还能用什么啊?可是问题总是要解决的,只能打开思路去思考各种可能性。首先我们可以分析人们是如何做十进制的加法的,比如是如何得出5+17=22这个结果的。实际上,我们可以分成三步的:第一步只做各位相加不进位,此时相加的结果是12(个位数5和7相加不要进位是2,十位数0和1相加结果是1);第二步做进位,5+7中有进位,进位的值是10;第三步把前面两个结果加起来,12+10的结果是22,刚好5+17=22。
前面我们就在想,求两数之和四则运算都不能用,那还能用什么啊?对呀,还能用什么呢?对数字做运算,除了四则运算之外,也就只剩下位运算了。位运算是针对二进制的,我们也就以二进制再来分析一下前面的三步走策略对...
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)