php 冷门与常用函数

目录

数组

1 . array_diff比较数组的差集

(判断请求参数是否缺少,在已设定的数组里)

$request = [
    'name'=>'xiaoming',
    'age'=>'18',
    'gender'=>''
]
function test( $request ){
    // 需要入库的参数
    $must = ['name','age','gender','school','height'];
    // 将请求参数的键取出比较
    $request_keys = array_keys($request);
    // 将请求中缺少的参数返回
    $param = array_diff($must , $request_keys);
    // 返回一个差集的数组
    // $param = ['school','height']

    // 此时可继续判断符合的参数是否有空值
    foreach ($must as $v){
        if(empty($requset[$v])){
            echo $v . '不能为空';
        }
    }
}
2 . array_column多维数组里只取指定的字段
班级表数组取所有学生姓名:
array_column ($arr, 'userName');
3 . compact()创建已有变量成数组
$m = 'is.m';
$n = 'is.n';
$l = 'is.l';
1$result = compact('m','n','l');      包含变量名的字符串
2: $result = compact(['m','n','l']);    包含变量名的数组
Array
(
    [m] => is.m
    [n] => is.n
    [l] => is.l
)
4 . extract()将数组键转为变量
$m = [
    'a'=>'---a',
    'b'=>'---b',
    'c'=>'---c'
];
$q = extract($m);
echo "$a \n $b \n $c";

$q = extract($m, EXTR_PREFIX_ALL,'t');     给所有变量加前缀
echo "$t_a \n $t_b \n $t_c";
5 . array_map处理数组每个值
# 普通文件
$arr = [1,2,3,4,5];
function foo($n)
{
    return $n * $n;
}
$res = array_map('foo', $arr);
# $res = [1,4,9,16,25]
# 匿名函数
$arr = [1,2,3,4,5];
$res = array_map(function($n){
    return $n * $n;
},$arr);
# $res = [1,4,9,16,25]
# 该函数在类中的运用
# 类中第一个参数为数组 ['类名','方法名']
$arr = [1,2,3,4,5];
class foo
{
    public function __construct($arr)
    {
        $res = array_map(['foo','map'], $arr);
        print_r($res);
        # $res = [1,4,9,16,25]
    }
    public function map($n)
    {
        return $n += time();
    }
}
new foo($arr);
6 . array_filter数组去空,callback过滤数组
$arr = [1,'',2,'',false,3,4];
array_filter($arr);
# [1,2,3,4]
7 . array_merge合并,重置索引
$arr = [1=>'a',3=>'b',8=>'c'];
array_merge($arr);
# ['a','b','c']
8 . 数组排序
// 重置索引
sort         从低到高
rsort        从高到底
ksort   按键 从低到高

// 保持键名
krsort  按键 从高到低
arsort       从高到低
asort        从低到高

string

目录

1 . json正确转换中文
$n = ['name'=>'小米'];
json_encode( $n )
                {"name":"\u5c0f\u7c73"}

json_encode( $n,JSON_UNESCAPED_UNICODE );
                {"name":"小米"}
2 . strval获取变量的字符串值
# 将变量的标量类型转换成string类型
$a = 123;
$b = 'hello';
$c = 99.9;
$d = true;
strval($a);        // string(0) "123"
strval($b);        // string(0) "hello"
strval($c);        // string(0) "99.9"
strval($d);        // string(0) "1"

预定义常量

目录

1 . DIRECTORY_SEPARATOR路径分隔符
路径分隔符常量 "DIRECTORY_SEPARATOR"
window:"\"
linux:"/"
例:define('UPLOAD', dirname(__FILE__).DIRECTORY_SEPARATORY.'upload'.DIRECTORY_SEPARATORY)
结果:E:\www\shop\upload\

类与对象

目录

1 . property_exists判断属性是否存在

property_exists( 对象obj或对象名string , 属性名 )

class a
{
    protected $a;
    protected $b;
}
$obj = new a();
if (property_exists($obj, 'a')) {
    echo "exist";
}

文件与目录

目录

1 .Linux中常常遇到权限问题,例如保存图片等
// 判断文件是否 **可读**
is_readable()

// 判断文件是否 **可写**
is_writable()

// 判断文件是否 **可执行**
is_executable()
2 .glob()查找与模式匹配的文件或目录

可以替代opendir( ),具有打开目录句柄的能力,直接匹配文件

// 查找匹配的文件
glob('*.php') // 当前目录
array(2) { 
    [0]=> string(5) "a.php" 
    [1]=> string(7) "b.php"}

// 带目录匹配
glob(dirname(__FILE__).'\\'.'*.php');
array(2) { 
    [0]=> string(22) "E:\www\test\a.php" 
    [1]=> string(24) "E:\www\test\b.php"}

// 查找匹配的目录
$a = glob(ROOT_PATH.'\\*',GLOB_ONLYDIR); // 表示仅返回匹配到的目录
array(2) { 
    [0]=> string(22) "E:\www\test\aadir" 
    [1]=> string(21) "E:\www\test\bbdir" }

返回目录

<think>好的,用户想了解常用数据库函数及其实现示例。首先,我需要回忆一下常见的聚合函数,比如SUM、AVG、MAX、MIN、COUNT,这些几乎是所有数据库都支持的。然后,字符串函数也很重要,比如CONCAT、SUBSTRING、LENGTH、REPLACE、TRIM,不同的数据库可能有不同的函数名,比如Oracle的SUBSTR和MySQL的SUBSTRING。接下来是日期函数,比如获取当前日期、日期加减、提取日期部分,不同数据库的语法差异较大,比如MySQL用DATE_ADD,而Oracle用ADD_MONTHS。还有类型转换函数,如CAST和CONVERT,以及条件函数如CASE WHEN和COALESCE。另外,窗口函数比如ROW_NUMBER、RANK、DENSE_RANK在分析数据时很有用,但可能有些数据库不支持或者语法不同。需要参考用户提供的引用内容,比如引用4提到了聚合函数,引用2提到了分析函数,引用5提到了LOCATE函数。要注意不同数据库的实现差异,比如达梦的LOCATE对应MySQL的INSTR或LOCATE,Oracle的INSTR。还要给出具体的示例,帮助用户理解用法。可能需要分门别类,把函数分为聚合、字符串、日期、转换、条件、窗口等类别,每个类别列举常用函数,并给出不同数据库的示例,比如MySQL、Oracle、PostgreSQL等。最后,生成相关问题,引导用户深入思考。需要确保LaTeX格式正确,行内公式用$...$,独立公式用$$...$$。同时检查引用标记是否正确添加,比如引用[^1]到[^5]。可能还需要注意用户提到的“常用函数,避免过于冷门函数,保持回答的实用性。</think>### 常用数据库函数分类及实现示例 #### 一、聚合函数 1. **统计类** - `SUM()`:计算数值列总和 ```sql -- MySQL/Oracle/H2 SELECT SUM(salary) FROM employees; ``` - `AVG()`:计算数值列平均值 $$ \text{平均工资} = \frac{\sum \text{salary}}{n} $$ ```sql -- Greenplum/达梦 SELECT AVG(price) FROM products; ``` - `COUNT()`:统计行数 ```sql -- 所有数据库通用 SELECT COUNT(*) FROM orders WHERE status='completed'; ``` 2. **极值类** - `MAX()/MIN()`:获取最大/最小值 ```sql -- Oracle/MySQL SELECT MAX(temperature), MIN(humidity) FROM sensor_data; ``` 3. **方差标准差** [^2][^4] - `STDDEV()`:计算样本标准差 - `VAR_POP()`:计算总体方差 ```sql -- Greenplum示例 SELECT STDDEV(sales), VAR_POP(profit) FROM financial_report; ``` --- #### 二、字符串函数 1. **拼接截取** - `CONCAT(str1, str2)`:字符串拼接 ```sql -- MySQL/H2 SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users; ``` - `SUBSTRING(str, start, length)`:截取子串 ```sql -- Oracle使用SUBSTR SELECT SUBSTR('Hello World', 7, 5) FROM dual; -- 返回"World" ``` 2. **定位替换** - `LOCATE(substr, str)` / `INSTR(str, substr)`:查找子串位置 [^5] ```sql -- 达梦示例 SELECT LOCATE('DB', 'LearnDB') AS pos; -- 返回6 ``` - `REPLACE(str, old, new)`:字符串替换 ```sql -- PostgreSQL示例 SELECT REPLACE('2023-01-01', '-', '/'); -- 返回"2023/01/01" ``` --- #### 三、日期函数 1. **时间计算** - `CURRENT_DATE` / `NOW()`:获取当前日期 ```sql -- MySQL获取6个月后的日期 [^1] SELECT DATE_ADD(CURRENT_DATE, INTERVAL 6 MONTH) AS future_date; ``` - `DATEDIFF(end, start)`:计算日期差 ```sql -- H2示例 SELECT DATEDIFF('day', '2023-01-01', '2023-02-01'); -- 返回31 ``` 2. **日期提取** - `EXTRACT(YEAR FROM date)`:提取年份 ```sql -- PostgreSQL/Oracle SELECT EXTRACT(YEAR FROM order_date) FROM orders; ``` --- #### 四、类型转换函数 1. `CAST(value AS type)` ```sql -- 将字符串转为数值(通用语法) SELECT CAST('123' AS INT) + 5; -- 返回128 ``` 2. `TO_DATE(str, format)` ```sql -- Oracle示例 SELECT TO_DATE('2023-12-25', 'YYYY-MM-DD') FROM dual; ``` --- #### 五、条件函数 1. `CASE WHEN` ```sql -- 分类价格层级 SELECT product_name, CASE WHEN price > 100 THEN '高价' WHEN price > 50 THEN '中价' ELSE '低价' END AS price_level FROM products; ``` 2. `COALESCE()`:返回第一个非NULL值 ```sql -- 替换NULL为默认值 SELECT COALESCE(email, '未填写') FROM customers; ``` --- #### 六、窗口函数 1. `ROW_NUMBER()`:生成行号 ```sql -- 按销售额排名 SELECT salesperson, ROW_NUMBER() OVER (ORDER BY sales DESC) AS rank FROM sales_data; ``` 2. `FIRST_VALUE()/LAST_VALUE()`:获取首尾值 [^2] ```sql -- Greenplum示例 SELECT date, FIRST_VALUE(price) OVER (PARTITION BY product_id ORDER BY date) AS first_price FROM price_history; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值