array_sort 给多维数组排序
应用场景:有时候有这样的需求 比如有两个选项卡 里面分别存放不同的数据 分别是从不同的数据表里取出来的 然后在这两个选项卡的前面还有一个最新或者热门的选项 这就需要将两者的数据揉合起来 但是又要按照点击率或者时间对其排序 如果数据都是从同一数据表里取出来的 那么就很好办 在取数据的SQL里加一个ORDER BY子句就行了 但是数据来自不同的表该怎么办呢 只要这些数据具有相同的键名 那么就可以利用下面的函数按照那个键名进行排序(这个键名下的键值一定要是数值 不能再是数组或者对象)
代码原理:将需要按照其排序的那个键的键值单独拿出来 组成一个一维数组 然后对其进行排序 实际上是对原数组的键名进行了排序 然后根据这些已排好序的键名去查找先前的键值 最后返回这个新数组
/**
- 按某个键值给二维或者多维数组排序
- params $arr 待排序的数组
- params $keys 按照那个键值排序的键名
- params $type 排序方式 默认为正序
- params $keep 键名是否重新排序
/
function array_sort($arr, $keys, $type ="asc", $keep = true){
$keysvalue = $new_array = array();
foreach ($arr as $k => $v) {
$keysvalue[$k] = $v[$keys];
}
if ($type == "asc") {
asort($keysvalue);
} else {
arsort($keysvalue);
}
reset($keysvalue);
foreach ($keysvalue as $k => $v) {
if($keep){
$new_array[] = $arr[$k];
} else {
$new_array[$k] = $arr[$k];
}
}
return $new_array;
}
浏览器友好输出
应用场景:提供比var_dump更详尽更人性化的调试输出信息
/ - 浏览器友好的变量输出
- @param mixed $var 变量
- @param boolean $echo 是否输出 默认为True 如果为false 则返回输出字符串
- @param string $label 标签 默认为空
- @param boolean $strict 是否严谨 默认为true
- @return void|string
/
function dump($var, $echo = true, $label = null, $strict = true)
{
$label = ($label === null) ? "" : rtrim($label) . "";
if (!$strict) {
if (ini_get("html_errors")) {
$output = print_r($var, true);
$output = "<pre>". $label . htmlspecialchars($output, ENT_QUOTES) . "</pre>";
} else {
$output = $label . print_r($var, true);
}
} else {
ob_start();
var_dump($var);
$output = ob_get_clean();
if (!extension_loaded("xdebug")) {
$output = preg_replace("/]=>\n(\s+)/m", "] =>", $output);
$output ="<pre>" . $label . htmlspecialchars($output, ENT_QUOTES) . "</pre>";
}
}
if ($echo) {
echo($output);
return null;
} else
return $output;
}
计算PHP数组的维度
应用场景:在某些场合下需要验证数据 判断数组的维度
/* - 获取数组的维度
*/
function arrayLevel($arr){
$level = array(); //存放各键的维度 最后的维度就是键中维度最大的
foreach ($arr as $value){
if(is_array($value)){
$level[] = arrayLevel($value);
} else {
$level[] = 0;
}
}
$level = count($level) > 0 ? $level : array(0);
$level = max($level); //最后在键的最大维度上加一
return ++$level;
}
对数组进行urlencode转码
应用场景:在某些接口中,可能会输出中文,如果直接对中文进行json_encode,会把中文转化为\u1234这样的unicode码,如果不想使中文被转换为unicode码,可先对其urlencode 然后 json_encode 再urldecode。但urlencode函数的参数是字符串 所以我们要自定义个函数来处理数组的场景
function advance_urlencode($arr){
if(is_array($arr) && count($arr) > 0){
foreach ($arr as &$v){
if(is_array($v)){
$v = advance_urlencode($v);
} else {
$v = urlencode($v);
}
}
return $arr;
} else {
return ;
}
}
php日期函数
应用场景:快速获取一些特定的时间
echo strtotime("-1 day"); //输出前一天的时间
echo strtotime("-1 month"); //输出一个月前的时间
//输出今天最早最晚时间
echo date("Y-m-d 00:00:00")
echo date("Y-m-d 23:59:59");
php数组转对象
应用场景:将数组转化为对象
function arrayToObject($array) {
if(!is_array($array)) {
return $array;
}
$object = new stdClass(); //实例化一个空对象
if (is_array($array) && count($array) > 0) {
foreach ($array as $name=>$value) {
$name = strtolower(trim($name));
if (!empty($name)) {
$object->$name = arrayToObject($value);
}
}
return $object;
}
else {
return FALSE;
}
}
网友评论