7.PHP陣列和字串常用函式

渲染流星的顏色發表於2018-04-11
1.運算元組的函式

range(起始值,結束值)

生在一個指定範圍的地址

$array1 = range(10,20); //生成一個10-20的陣列
print_r($array1); 
//Array ( [0] => 10 [1] => 11 [2] => 12 [3] => 13 [4] => 14 [5] => 15 [6] => 16 [7] => 17 [8] => 18 [9] => 19 [10] => 20 ) 

echo '<br>';

$array2 = range('a','f'); //生成一個a-f的陣列
print_r($array2);
//Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f ) 

echo '<br>';

$array3 = range('F','A'); //生成一個F-A的陣列
print_r($array3);
//Array ( [0] => F [1] => E [2] => D [3] => C [4] => B [5] => A ) 
複製程式碼

array_rand(陣列,隨機取出元素的個數)

  • 隨機取出陣列內元素,返回隨機陣列的下標
  • 如果隨機取出1個,返回整型下標
  • 如果隨機取出多個,返回整型下標陣列
$array1 = range(10,20);
print_r(array_rand($array1,1)); //隨機輸出陣列中的1位 3
echo '<br>';
print_r(array_rand($array1,4)); //隨機輸出陣列中的4位 Array ( [0] => 1 [1] => 6 [2] => 7 [3] => 8 ) 
echo '<br>';
複製程式碼

shuffle(陣列)

打亂陣列(打亂成功返回true,打亂失敗返回false)

$array1 = range(10,20);
print_r($array1);
echo '<br>';
shuffle($array1); //打亂陣列
print_r($array1);
echo '<br>';
print_r($array1);
echo '<br>';

// Array ( [0] => 10 [1] => 11 [2] => 12 [3] => 13 [4] => 14 [5] => 15 [6] => 16 [7] => 17 [8] => 18 [9] => 19 [10] => 20 ) 
// Array ( [0] => 14 [1] => 16 [2] => 11 [3] => 10 [4] => 20 [5] => 19 [6] => 12 [7] => 13 [8] => 15 [9] => 17 [10] => 18 ) 
// Array ( [0] => 14 [1] => 16 [2] => 11 [3] => 10 [4] => 20 [5] => 19 [6] => 12 [7] => 13 [8] => 15 [9] => 17 [10] => 18 ) 
複製程式碼

is_array()

判斷變數是否是陣列型別

$array1 = range(10,20);
if(is_array($array1)){
    echo '是陣列';
}else{
    echo '不是陣列';
}
複製程式碼

array_search()

在陣列中搜尋給定的值,如果成功則返回相應的鍵名,如果找不到返回false

$array = range(10,20);
echo array_search(15,$array),'<br>'; //5
var_dump(array_search(30,$array)); //bool(false)
複製程式碼
2.運算元組鍵值函式

array_keys()和array_values()

  • array_keys($array):返回陣列中的所有鍵名
  • array_values($array):返回陣列中的所有值
 $array = range('A','F');
$key = array_keys($array);
$value = array_values($array);
print_r($key); echo '<br>';
print_r($value); echo '<br>';
// Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 ) 
// Array ( [0] => A [1] => B [2] => C [3] => D [4] => E [5] => F ) 
複製程式碼

array_combine(鍵陣列,值陣列)

建立一個陣列,用鍵陣列的值做鍵名,值陣列的值做值

$key = array('name','sex','age');
$value = array('李白','男','18');
$array = array_combine($key,$value);
print_r($array); echo '<br>';
//Array ( [name] => 李白 [sex] => 男 [age] => 18 ) 
複製程式碼

如果鍵陣列和值陣列的元素個數不一樣,返回false

in_array(查詢的值,陣列)

作用:檢查陣列中是否包含某個值,返回bool型別

$array = array('name' => '李白', 'sex' => '男', 'age' => '18');
var_dump(in_array('18',$array)); echo '<br>'; //bool(true) 
複製程式碼

查詢陣列的值:區分大小寫,不區分資料型別

array_key_exists(鍵,陣列)

檢查鍵名或索引是否在陣列中

$array = array('name' => '李白', 'sex' => '男', 'age' => '18');
var_dump(array_key_exists('sex',$array)); echo '<br>'; //bool(true) 
var_dump(array_key_exists('sexs',$array)); echo '<br>'; //bool(false) 
複製程式碼

isset(變數名)

檢測變數是否設定,並且設定的值不為null

//array_key_exists()和isset()的區別

$array = array('name' => '李白', 'sex' => '男', 'age' => '18', 'add' => NULL);
var_dump(array_key_exists('name',$array),isset($array['name'])); echo '<br>'; //bool(true) bool(true) 
var_dump(array_key_exists('add',$array),isset($array['add'])); echo '<br>'; //bool(true) bool(false) 
複製程式碼
3.陣列連線和字串分割函式

將陣列的值連線成字串:implode()

別名是join(),將陣列的值連線成字串

$array1 = array('李白','男','18',NULL);
$array2 = implode('-',$array1); //將陣列的值連線成字串
echo $array2,'<br>'; //李白-男-18-
複製程式碼

將字串分割成陣列: explode()

$array2 = '李白-男-18-';
$array3 = explode('-',$array2);
print_r($array3); echo '<br>'; //Array ( [0] => 李白 [1] => 男 [2] => 18 [3] => ) 
複製程式碼
4.陣列運算函式

陣列合並: array_merge()

$array1 = array_merge(range('a','f'),range('A','F'),range(0,9));
print_r($array1); 
//Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => A [7] => B [8] => C [9] => D [10] => E [11] => F [12] => 0 [13] => 1 [14] => 2 [15] => 3 [16] => 4 [17] => 5 [18] => 6 [19] => 7 [20] => 8 [21] => 9 ) 
複製程式碼

陣列合並時候下標衝突,按如下規則解決:

  • 如果是字串下標,後面的元素將前面的元素覆蓋
  • 如果在整數下標,重新建立下標索引
$array1 = array('name'=>'李白','sex'=>'男','age'=>'18','ctiy'=>'廣州',0=>'lb');
$array2 = array('name'=>'杜甫','sex'=>'女','age'=>'28',0=>'dp');
$array3 = array_merge($array1,$array2);
print_r($array3); 
//Array ( [name] => 杜甫 [sex] => 女 [age] => 28 [ctiy] => 廣州 [0] => lb [1] => dp ) 
echo '<br>';
複製程式碼

資料的差集:array_diff(陣列1,陣列2,陣列3,…)

$array1 = range(10,20);
$array2 = range(0,12);
$array3 = range(18,30);
print_r(array_diff($array1,$array2)); echo '<br>';
//Array ( [3] => 13 [4] => 14 [5] => 15 [6] => 16 [7] => 17 [8] => 18 [9] => 19 [10] => 20 ) 

print_r(array_diff($array1,$array2,$array3)); echo '<br>';
//Array ( [3] => 13 [4] => 14 [5] => 15 [6] => 16 [7] => 17 )
//下標不會孌,和下標沒關係
複製程式碼

陣列相交:array_intersect(陣列1,陣列2,陣列3,…) 陣列的交集結果中,下標使用的是第一個陣列的下標。 取兩個陣列中一樣的

$array1 = range(10,20);
$array2 = range(0,12);
$array3 = range(18,30);
print_r(array_intersect($array1,$array2)); echo '<br>';
//Array ( [0] => 10 [1] => 11 [2] => 12 ) 
print_r(array_intersect($array1,$array3)); echo '<br>';
//Array ( [8] => 18 [9] => 19 [10] => 20 ) 
複製程式碼
5.使用回撥函式的函式

回撥函式:計算機自己呼叫的函式,不需要手動呼叫。

array_map('函式名','陣列')

呼叫PHP自身的函式

$array1 = array(10,-20,-30,52);
$new_array1 = array_map('abs',$array1); //aba中PHP中自身的函式(絕對值)
print_r($new_array1); echo '<br>';
//Array ( [0] => 10 [1] => 20 [2] => 30 [3] => 52 ) 
複製程式碼

呼叫自定義函式

function fun($name){
    return '你好'.$name;
}
$array = array('呵呵','哈哈');
$new_array = array_map('fun',$array);
print_r($new_array); echo '<br>';
//Array ( [0] => 你好呵呵 [1] => 你好哈哈 ) 
複製程式碼
$array = array('呵呵','哈哈');
$new_array = array_map(function ($name){
    return '你好'.$name;
},$array);
print_r($new_array); echo '<br>';
//Array ( [0] => 你好呵呵 [1] => 你好哈哈 ) 
複製程式碼

array_map()支援一次處理多個陣列,將所有陣列中同位置的元素作為引數傳遞給回撥函式

$php = array('68','54','78','62');
$MySQL = array('45','87','98','36');
function fun($php,$MySQL){
    return $php+$MySQL;
}
$new_array = array_map('fun',$php,$MySQL);
print_r($new_array); echo '<br>';
//Array ( [0] => 113 [1] => 141 [2] => 176 [3] => 98 ) 
複製程式碼

array_map()預設可以將多個陣列的同位置的元素組成新陣列

//null表示預設操作
$php = array('68','54','78','62');
$MySQL = array('45','87','98','36');
function fun($php,$MySQL){
    return $php+$MySQL;
}
$new_array = array_map(null,$php,$MySQL);
print_r($new_array); echo '<br>';
//Array ( [0] => Array ( [0] => 68 [1] => 45 ) [1] => Array ( [0] => 54 [1] => 87 ) [2] => Array ( [0] => 78 [1] => 98 ) [3] => Array ( [0] => 62 [1] => 36 ) ) 
複製程式碼

++array_map()只能處理值,不能處理鍵++

array_walk(陣列,回撥函式)

作用:對陣列中的每個元素的鍵值進行對調處理,類似於foreach迴圈

  • 如果回撥函式是一個引數,則這個引數是值
  • 如果呼叫函式是兩個引數,第一個是值,第二個是鍵
$array = array('name'=>'李白','sex'=>'男','age'=>'18','ctiy'=>'廣州',0=>'lb');
function funs($value,$key){
    echo $key,'-',$value,'<br>';
}
function fun($key){
    echo $key,'<br>'; 
}
array_walk($array,'fun');
echo '<br><br>';
array_walk($array,'funs');

// 李白
// 男
// 18
// 廣州
// lb

// name-李白
// sex-男
// age-18
// ctiy-廣州
// 0-lb
複製程式碼
6.棧和佇列
  • 棧和佇列都屬於資料結構
  • 棧是先進後出
  • 佇列是先進先出
實現棧效果的函式
  • array_push(陣列,入[棧|佇列]的值) //類似追加
  • array_pop():出棧,將最尾部的元素彈出 //刪除最後一個
$array = array();
array_push($array,'李白'); //入棧
array_push($array,'杜甫','白居易'); //入棧
print_r($array); echo '<br>'; //Array ( [0] => 李白 [1] => 杜甫 [2] => 白居易 )
array_pop($array); //出棧
print_r($array); echo '<br>'; //Array ( [0] => 李白 [1] => 杜甫 )
複製程式碼

++array_push()和array_pop()作用在於維護一個連續的儲存空間;為新增加的元素重寫下標(索引)++

實現佇列效果的函式
  • array_shift():出佇列,將佇列中的第一個元素移除 //刪除頭
  • array_unshift():在陣列的開頭插入一個元素 //頭插入
$array = array();
array_unshift($array,'李白'); //堆疊
array_unshift($array,'杜甫','白居易'); //堆疊
print_r($array); echo '<br>'; //Array ( [0] => 杜甫 [1] => 白居易 [2] => 李白 ) 
array_shift($array); //出棧
print_r($array); echo '<br>'; //Array ( [0] => 白居易 [1] => 李白 ) 
複製程式碼
7.陣列排序函式

sort() :按值進行升序排列,不保持原來的鍵值關聯

$list = array('a'=>10,'c'=>5,'b'=>12);
sort($list);
print_r($list); echo '<br>';
//Array ( [0] => 5 [1] => 10 [2] => 12 ) 
複製程式碼

rsort():按值進行降序排列,不保持原來的鍵值關聯

$list = array('a'=>10,'c'=>5,'b'=>12);
rsort($list);
print_r($list); echo '<br>';
//Array ( [0] => 12 [1] => 10 [2] => 5 ) 
複製程式碼

asort():按值進行升序排列,保持原來的鍵值關聯

$list = array('a'=>10,'c'=>5,'b'=>12);
asort($list);
print_r($list); echo '<br>';
//Array ( [c] => 5 [a] => 10 [b] => 12 ) 
複製程式碼

arsort():按值進行降序排列,保持原來的鍵值關聯

$list = array('a'=>10,'c'=>5,'b'=>12);
arsort($list);
print_r($list); echo '<br>';
//Array ( [b] => 12 [a] => 10 [c] => 5 ) 
複製程式碼

ksort():按鍵進行升序排列

$list = array('a'=>10,'c'=>5,'b'=>12);
ksort($list);
print_r($list); echo '<br>';
//Array ( [a] => 10 [b] => 12 [c] => 5 ) 
複製程式碼

krsort():按鍵進行降序排列

$list = array('a'=>10,'c'=>5,'b'=>12);
krsort($list);
print_r($list); echo '<br>';
//Array ( [c] => 5 [b] => 12 [a] => 10 )  
複製程式碼

natsort():自然排序

$list = array('stu_3','stu_1','stu_15','stu_10','stu_260');
sort($list);
print_r($list); echo '<br>';
//按每一位數字分開比較排序
//Array ( [0] => stu_1 [1] => stu_10 [2] => stu_15 [3] => stu_260 [4] => stu_3 ) 
natsort($list);
print_r($list); echo '<br>';
//按整體數字比較排序
//Array ( [0] => stu_1 [4] => stu_3 [1] => stu_10 [2] => stu_15 [3] => stu_260 ) 
複製程式碼

usort():使用者自定義排序

$stu = array(
    array('name'=>'李白','age'=>22,'score'=>65),
    array('name'=>'杜甫','age'=>12,'score'=>77),
    array('name'=>'白居易','age'=>8,'score'=>87),
    array('name'=>'王安石','age'=>32,'score'=>20),
);

function fun($stu1,$stu2){
    if($stu1['age']<$stu2['age'])
        return -1;
    elseif ($stu1['age']>$stu2['age'])
        return 1;
    else 
        return 0;
}
usort($stu,'fun');
echo '<pre>';
print_r($stu);
// Array
// (
//     [0] => Array
//         (
//             [name] => 白居易
//             [age] => 8
//             [score] => 87
//         )
//     [1] => Array
//         (
//             [name] => 杜甫
//             [age] => 12
//             [score] => 77
//         )
//     [2] => Array
//         (
//             [name] => 李白
//             [age] => 22
//             [score] => 65
//         )
//     [3] => Array
//         (
//             [name] => 王安石
//             [age] => 32
//             [score] => 20
//         )
// )
複製程式碼
8.字串操作函式

[] 字串可以理解成字元的集合,所以可以通過[]來訪問。不能操作中文

$stu = 'abcdefg';
echo $stu[0],'<br>'; //a

$stu[2] = 'C';
echo $stu,'<br>'; //abCdefg
複製程式碼

strlen() 返回字串長度,以位元組為單位

$stu = 'abcdefg';
echo strlen($stu),'<br>'; //7

$str = '中文';
echo strlen($str),'<br>'; //6

//在gbk下一個漢字2個位元組,在utf8下一個漢字3個位元組。
複製程式碼

trim()、ltrim()、rtrim():去空白字元

  • trim():去字串兩邊的把空格
  • ltrim():去字串左邊的空格
  • rtrim():去字串右邊的空格

strpos()

  • strpos():查詢字串首次出現的位置
  • strrpos():查詢字串最後一次出現的位置
$stu = 'abcdefga';
echo strpos($stu,'a'),'<br>'; //0
echo strrpos($stu,'a'),'<br>'; //7
複製程式碼

str_repeat():重複字串

$word = 'hello!';
echo str_repeat($word,3),'<br>'; //hello!hello!hello!
複製程式碼

chr()、ord()

$num = ord('A'); //獲取字元的Asc||碼
echo $num,'<br>'; //65
echo chr($num),'<br>'; //將ASC||轉成字元 A
複製程式碼

substr(字串,開始位置,擷取長度):擷取字串

$num = 'abcdef';
echo substr($num,1,3),'<br>'; //bck
echo substr($num,-3,2),'<br>'; //de
echo substr($num,-1,2),'<br>'; //f
//長度省略就擷取到結尾
echo substr($num,1),'<br>'; //bcdef
echo substr($num,-4),'<br>'; //cdef
//長度為負表示後面有幾個字元不擷取
echo substr($num,1,-1),'<br>'; //bcde
echo substr($num,-4,-2),'<br>'; //cd
複製程式碼

strchr()、strrchr()

$num = 'abcdebf';
echo strchr($num,'b'),'<br>'; //bcdebf //從哪個字元開始往後擷取
echo strrchr($num,'b'),'<br>'; //bf //從哪個字元最後一個開始往後擷取
複製程式碼

str_replace():替換字串

$num = '明日復明日,明日何其多';
echo str_replace('明日','今日',$num),'<br>'; //所有明日替換成今日:今日復今日,今日何其多

$array1 = array('明日','復','何其');
$array2 = array('一天','又','非常');
echo str_replace($array1,$array2,$num),'<br>';//一天又一天,一天非常多
複製程式碼

str_split():將字串分割成陣列

$str = 'abcdef';
print_r(str_split($str)); echo '<br>';
//Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f )

print_r(str_split($str,2)); echo '<br>';
//Array ( [0] => ab [1] => cd [2] => ef ) 
複製程式碼

str_pad(待填充字串,總位數,填充字元,填充位置) 填充字串

$stuid = 12;
echo str_pad($stuid,4,'0'),'<br>'; //1200
echo str_pad($stuid,4,'0',STR_PAD_LEFT),'<br>'; //0012 在左邊加
echo str_pad($stuid,4,'0',STR_PAD_BOTH),'<br>'; //0120 在兩邊加
複製程式碼

字串大小寫轉換

echo strtolower('I AM A BOY'),'<br>'; //轉換成小寫
echo strtoupper('i am a boy'),'<br>'; //轉換成小寫
複製程式碼

nl2br():將字串的換行轉成

nl2br() //常用於文字域換行
複製程式碼

htmlspecialchars():將HTML字型轉成實體

echo htmlspecialchars('<p>呵呵</p>'),'<br>'; //<p>呵呵</p>
複製程式碼

urlencode()、urldecode():url編碼和解碼

echo urlencode('明日復明日,明日何其多'),'<br>';//%E6%98%8E%E6%97%A5%E5%A4%8D%E6%98%8E%E6%97%A5%EF%BC%8C%E6%98%8E%E6%97%A5%E4%BD%95%E5%85%B6%E5%A4%9A
echo urldecode('%E6%98%8E%E6%97%A5%E5%A4%8D%E6%98%8E%E6%97%A5%EF%BC%8C%E6%98%8E%E6%97%A5%E4%BD%95%E5%85%B6%E5%A4%9A'),'<br>'; //明日復明日,明日何其多
複製程式碼
9.多位元組字串處理函式

PHP預設本身不支援多位元組處理。要開啟mb_擴充套件(multibytes). ==開啟extension=php_mbstring.dll==

mb_strlen():獲取字串的長度

$str = '明日何其多';
echo mb_strlen($str),'<br>'; //15
echo mb_strlen($str,'utf-8'),'<br>'; //5
複製程式碼

mb_internal_encoding():設定/獲取內部字元編碼

$str = '明日何其多';
echo mb_internal_encoding(),'<br>'; //ISO-8859-1
echo mb_strlen($str),'<br>'; //15
echo mb_strlen($str,'utf-8'),'<br>'; //5
mb_internal_encoding('utf-8'); //設定PHP編碼為utf-8
echo mb_internal_encoding(),'<br>'; //utf-8
echo mb_strlen($str),'<br>'; //5
複製程式碼

mb_strpos():查詢字串在另一個字串中的位置

$str = '明日何其多';
echo mb_strpos($str,'何'),'<br>';//6
mb_internal_encoding('utf-8'); //設定PHP編碼為utf-8
echo mb_strpos($str,'何'),'<br>';//2
echo strpos($str,'何'),'<br>';//6
複製程式碼

mb_substr():獲取子字串

<?php
    $str = '明日何其多';
    mb_internal_encoding('utf-8'); //設定PHP編碼為utf-8
    echo substr($str,1,2),'<br>';//亂碼
    echo mb_substr($str,1,2),'<br>';//日何
?>
複製程式碼
10.字串編碼

iconv(輸入的編碼,輸出編碼,字串)

$str = '明日何其多';
echo strlen($str),'<br>';//15
$str_gbk = iconv('utf-8','gbk',$str); //將字串轉成gbk格式
echo strlen($str_gbk),'<br>';//10
複製程式碼

相關文章