将一个十进制数转换为36进制【0-9a-z】
<?php
$arr = [0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
$index = 36;
echo fn($index);
//10
function fn($index){
global $arr;
$len = sizeof($arr);
$res = '';
$m = 0;
$n = 0;
do{
$m = floor($index/$len);
$n = $index%$len;
$res = $arr[$n].$res;
$index = $m;
}while($index);
return $res;
}
如果你有10块钱,2块钱可以买一瓶酒,两个酒瓶可以换一瓶酒,四个啤酒盖可以换一瓶酒,问可以喝多少瓶酒,还剩余多少个
啤酒瓶和啤酒盖?
<?php
$money = 10;
$have_bootle;
$have_cap;
$all = floor($money/2);
$bottle = $all;
$cap = $all;
echo drink($all,$all)+$all;
//15
echo '</br>';
echo '剩余酒瓶数量: '.$have_bootle.' 剩余瓶盖数量: '.$have_cap;
//1 - 3
//若借5瓶酒,可以全部抵消
function drink($num_bottle,$num_cap)
{
global $have_cap,$have_bootle;
$bottle = $num_bottle;
$cap = $num_cap;
if($bottle>=2 || $cap >=4){
$have_bootle = floor($bottle/2)+$bottle%2+floor($cap/4);
$have_cap = floor($cap/4)+$cap%4+floor($bottle/2);
return floor($bottle/2)+floor($cap/4)+drink($have_bootle,$have_cap);
}
}
给定一组排好序的数组[1-54],将该数组乱序
<?php
$temp = 0;
$arr = range(1,54);
echo implode(',',$arr).PHP_EOL;
$index = $length = sizeof($arr)-1;
for(;$index>=0 ;$index--){
$rand = rand(0,$length);
$temp = $arr[$rand];
$arr[$rand] = $arr[$index];
$arr[$index] = $temp;
}
echo implode(',',$arr);
有一个乱序的数组,给出数组中的一个值,求其键key
<?php
$temp = 0;
$arr = range(1,10);
$index = $length = sizeof($arr)-1;
for(;$index>=0 ;$index--){
$rand = rand(0,$length);
$temp = $arr[$rand];
$arr[$rand] = $arr[$index];
$arr[$index] = $temp;
}
print_r($arr);
$val = $arr[rand(0,sizeof($arr)-1)];
echo 'value: '.$val.PHP_EOL;
$reverseArr = array_flip($arr);
echo 'key: '.$reverseArr[$val];
//这里使用了一个php内置函数,并不是通用方法,若有更好的通用算法,欢迎留言讨论,当然一个for循环一个个比较就不说了。
有一个重复数据的数组,找出重复值
<?php
//查找重复元素
function fn($arr){
$temp = array();
$repeat = array();
foreach($arr as $v){
if($temp[$v] && $temp[$v] != 2){
$repeat[] = $v;
$temp[$v] = 2;
}else{
$temp[$v] = 1;
}
}
return $repeat;
}
//不能获得单个重复值
function fn1($array) {
// 获取去掉重复数据的数组
$unique_arr = array_unique ( $array );
// 获取重复数据的数组
$repeat_arr = array_diff_assoc ( $array, $unique_arr );
return $repeat_arr;
}
function fn2($arr)
{
if(!is_array($arr)) return $arr;
$arr1 = array_count_values($arr);
$newArr = array();
foreach($arr1 as $k=>$v)
{
if($v>1) array_push($newArr,$k);
}
return $newArr;
}
function fn3($arr)
{
if(!is_array($arr)) return $arr;
$arr1 = array_unique($arr);
$arr3 = array_diff_key($arr,$arr1);
return array_unique($arr3);
}
$arr = array('apple','blue','red','banana','pear','apple','blue','color','color','color');
print_r(fn($arr));
//以下三个都使用到了php内置函数
print_r(fn1($arr));
print_r(fn2($arr));
print_r(fn3($arr));