PHP常用函数2


概念

  1. 数组都是key-value对
  2. 数组 = 索引数组 + 关联数组, 也可以说 索引数组是关联数组的儿子,是一种特殊索引的关联数组,其只不过key是int型的关联数组(php数组的key判断是弱类型,'0’是与0相同的)

var_export返回什么类型

echo gettype(var_export($a, 1)).PHP_EOL; // 返回字符串
echo gettype(var_export($a, 0)); // 我也不知道返回的是啥类型

/*
string
array (
  0 => 1,
  1 => 4,
  2 => 3,
  3 => 2,
  4 => 5,
)NULL
*/

trim特定字符

tirm + ltrim + rtrim

string trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] )

此函数返回字符串 str 去除首尾空白字符后的结果。如果不指定第二个参数,trim() 将去除这些字符:

  1. " " (ASCII 32 (0x20)),普通空格符
  2. “\t” (ASCII 9 (0x09)),制表符
  3. “\n” (ASCII 10 (0x0A)),换行符
  4. “\r” (ASCII 13 (0x0D)),回车符
  5. “\0” (ASCII 0 (0x00)),空字节符
  6. “\x0B” (ASCII 11 (0x0B)),垂直制表符

只能删除从边边开始都相同的字符,也就是说刚一碰见不同的它就软了

print_r(rtrim(ltrim('}{{{{aaaa}}}}}{', '{'), '}').PHP_EOL);
print_r(rtrim(ltrim('{{{{aaaa}}}}}', '{'), '}').PHP_EOL);print_r(trim('{{{{{{aaaaaa{{{{}', '{'));

/*
}{{{{aaaa}}}}}{
aaaa
aaaaaa{{{{}
*/

ceil和round的区别

float ceil ( float $value )
float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )

  1. ceil 进一法取整,也就说只要有小数点就进1
  2. round 四舍五入 小数点大于等于0.5进1
var_dump(ceil(0.01), ceil(1.02), round(0.5), round(0.05));

/*
float(1)
float(2)
float(1)
float(0)
 */

preg_match_all,三种标志的区别

  1. PREG_PATTERN_ORDER:二维数组,对于有括号的字符串会再push一个数组,只选取括号里的内容
  2. PREG_SET_ORDER:二维数组,其不管字符串中是否存在括号,其余与PREG_PATTERN_ORDER一样
  3. PREG_OFSET_CAPTURE:三维数组,其也是不管字符串中是否存在括号,但它还标出字符串下标,也因此它是三维数组
preg_match_all('/{(.*?)}/', '{title}{ggg}{3224}', $_cr_words_1, PREG_PATTERN_ORDER);
print_r($_cr_words_1);

preg_match_all('/({.*?})/', '{title}{ggg}{3224}', $_cr_words_2, PREG_SET_ORDER);
print_r($_cr_words_2);

preg_match_all('/({.*?})/', '{title}{ggg}{3224}', $_cr_words_3, PREG_OFFSET_CAPTURE);
print_r($_cr_words_3);

/* result:

Array
(
    [0] => Array
        (
            [0] => {title}
            [1] => {ggg}
            [2] => {3224}
        )

    [1] => Array
        (
            [0] => title
            [1] => ggg
            [2] => 3224
        )

)
Array
(
    [0] => Array
        (
            [0] => {title}
            [1] => {title}
        )

    [1] => Array
        (
            [0] => {ggg}
            [1] => {ggg}
        )

    [2] => Array
        (
            [0] => {3224}
            [1] => {3224}
        )

)
Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => {title}
                    [1] => 0
                )

            [1] => Array
                (
                    [0] => {ggg}
                    [1] => 7
                )

            [2] => Array
                (
                    [0] => {3224}
                    [1] => 12
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => {title}
                    [1] => 0
                )

            [1] => Array
                (
                    [0] => {ggg}
                    [1] => 7
                )

            [2] => Array
                (
                    [0] => {3224}
                    [1] => 12
                )

        )

)

*/

array_push、+、array_merge的区别

  1. array_push:直接把数组元素当成一个整体插入到$a的末尾
  2. +,是循环数组元素push到$b的末尾(注意:其会检测是否key相同,若key相同,则不强行插入或者替换,也就是不会强行合并)
  3. array_merge : 跟 + 功能类似,但会强行合并已有的key
$a = $b = [1,2,3,4] ;
array_push($a, [5, 'a'=>1]);
var_dump(var_export($a,1));
var_dump(var_export($b + ['1' => 100, '4' => 5, 'a' => 1], 1));

/*
string(98) "array (
  0 => 1,
  1 => 2,
  2 => 3,
  3 => 4,
  4 => 
  array (
    0 => 5,
    'a' => 1,
  ),
)"
string(71) "array (
  0 => 1,
  1 => 2,
  2 => 3,
  3 => 4,
  4 => 5,
  'a' => 1,
)"

*/

取出数组的第一个元素

pos=current + key + next + prev + end + reset

  1. pos(&)=current(&):取出数组当前value,若无使用next、prev、end、reset等偏移内部指针的函数,将取出第一个元素
  2. key(&):取出数组当前key,若无使用next、prev、end、reset等偏移内部指针的函数,将取出第一个元素
  3. 所以若要取出数组第一个key-value对,可使用组装[ key( v a r ) = > c u r r e n t ( var) => current( var)=>current(var) ]
  4. next(&):将数组的内部指针向下移一位
  5. prev(&):将数组的内部指针向上移一位
  6. end(&):将数组的内部指针指向最后一位
  7. reset(&):将数组的内部指针指向第一位
$a = [1,4,3,2,5];

$b = [
    'a' => 'a',
    'c' => 2,
    'b' => 4,
    'd' => 3
];

var_dump(current($a), current($b));

next($a);
next($b);
// foreach会重置内部指针
foreach ($b as $k=>$v){
    echo $k.$v.PHP_EOL;
}

var_dump(current($a), $a, current($b), $b);

/*
int(1)
string(1) "a"
aa
c2
b4
d3
int(4)
string(59) "array (
  0 => 1,
  1 => 4,
  2 => 3,
  3 => 2,
  4 => 5,
)"
int(2)
string(59) "array (
  'a' => 'a',
  'c' => 2,
  'b' => 4,
  'd' => 3,
)"
*/

数组交集

array_intersect + array_intersect_assoc + array_intersect_key

array array_intersect ( array $array1 , array $array2 [, array $… ] )
array array_intersect_assoc ( array $array1 , array $array2 [, array $… ] )
array array_intersect_key ( array $array1 , array $array2 [, array $… ] )

  1. array_intersect 只检查value,value相同key不同则返回array1中的值
  2. array_intersect_assoc 检查key-value对
  3. array_intersect_key 只检查key
function array_intersect(array $array1, array $array2, array $_ = null) { }

print_r(array_intersect([1,2,3], [2,3,4]));

/*
Array
(
    [1] => 2
    [2] => 3
)
*/

数组差集

array_diff

// 差集 以左边数据为准
var_dump(array_diff([1,2,3,4,5], [1,2,3,4,5,6]));

/*
Array
(
)
*/

$a=array(0=>"Dog", 1=>"Cat", 2=>"Horse", 3=>"Bird");
$b=array(0=>"Tiger", 1=>"Lion");
// 把b数组中的元素一个个拿出来 拼接到 移除的位置
array_splice($a,0,1, $a); // 注意$a处是引用
print_r($a);

/*
Array
(
    [0] => Tiger
    [1] => Lion
    [2] => Dog
    [3] => Cat
    [4] => Horse
    [5] => Bird
)
*/

检测字符串编码

mb_detect_encoding + iconv/mb_convert_encoding

1. iconv ( string $in_charset , string $out_charset , string $str  )
2. mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding = mb_internal_encoding() ] )
// 采用mb_detect_encoding 可行就通过 不行就自己循环找
function my_detect_encoding($str, array $charsets=[]){
    $encoding = mb_detect_encoding($str);
    $tmp_charset = find_encoding($str, $encoding);
    if ($tmp_charset){
        return $tmp_charset;
    }
    if (!$charsets) $charsets = [ 'GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1' ];
    foreach ($charsets as $charset) {
        $tmp_charset = find_encoding($str, $charset);
        if ($tmp_charset) {
            return $tmp_charset;
        } else {
            return false;
        }
    }
};

function find_encoding($str, $encoding) {
    $tmp_len1 = mb_strlen($str);
    $tmp_len2 = mb_strlen(iconv($encoding, $encoding, $str));
    if ($tmp_len1 === $tmp_len2) {
        return $encoding;
    } else {
        return false;
    }
}

error_reporting(E_ALL & ~E_NOTICE);
exec('dir', $a);
var_dump(my_detect_encoding($a[0]));

统计数组的value

array_count_values

array array_count_values ( array $array )

array_count_values()

随机数组(key)

array_rand

var_dump(array_rand(['a', 'b', 'c', 'd']))

字符串替换

str_replace

echo str_replace(['我', 's'], ['你', 'a'], 'www我sss').PHP_EOL; // www你aaa
echo str_replace(['我', 's'], ['你'], 'www我sss'); // www你

随机数

rand()/mt_rand()

int mt_rand ( int $min , int $max )
int rand ( int $min , int $max ) 不推荐使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值