php數組序列
⑴ php數組序列化問題,a:1:{i:2;i:3;}
a:1:{}一個數組
i:0;
整數,長度為0,無值
s:1:"1",字元型,長度1,值為1
序列化的結果總是3部分組成的,類型:長度:值,多個結果之間使用;分割
⑵ php 數組序列化
mixed unserialize ( string str [, string callback] )
unserialize() 對單一的已序列化的變數進行操作,將其轉換回 PHP 的值。返回的是轉換之後的值,可為 integer、float、string、array 或 object。如果傳遞的字元串不可解序列化,則返回 FALSE。
unserialize_callback_func 指令: 如果在解序列化的時候需要實例化一個未定義類,則可以設置回調函數以供調用(以免得到的是不完整的 object 「__PHP_Incomplete_Class」)。可通過 php.ini、ini_set() 或 .htaccess 定義『unserialize_callback_func』。每次實例化一個未定義類時它都會被調用。若要禁止這個特性,只需置空此設定。還需要注意的是 unserialize_callback_func 指令是從 PHP 4.2.0 開始提供使用的。
若被解序列化的變數是一個對象,在成功地重新構造對象之後,PHP 會自動地試圖去調用 __wakeup() 成員函數(如果存在的話)。 例子 1. unserialize_callback_func 示例
<?php
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';
// unserialize_callback_func 從 PHP 4.2.0 起可用
ini_set('unserialize_callback_func','mycallback'); // 設置您的回調函數
function mycallback($classname) {
// 只需包含含有類定義的文件
// $classname 指出需要的是哪一個類
}
?>
<?php
// 這里,我們使用 unserialize() 裝載來自資料庫的 $session_data 數組中的會話數據。
// 此例是描述 serialize() 的那個例子的補充。
$conn = odbc_connect ("webdb", "php", "chicken");
$stmt = odbc_prepare ($conn, "SELECT data FROM sessions WHERE id = ?");
$sqldata = array ($PHP_AUTH_USER);
if (!odbc_execute ($stmt, &$sqldata) || !odbc_fetch_into ($stmt, &$tmp)) {
// 如果執行出錯或返回錯誤,則初始化為空數組
$session_data = array();
} else {
// 現在我們需要的是 $tmp[0] 中已序列化的數據。
$session_data = unserialize ($tmp[0]);
if (!is_array ($session_data)) {
// 出錯,初始化為空數組
$session_data = array();
}
}
?>
⑶ php數組函數序列之array_sum() - 計算數組元素值之和
array_sum()定義和用法
array_sum()
函數返回數組中所有值的總和。
如果所有值都是整數,則返回一個整數值。如果其中有一個或多個值是浮點數,則返回浮點數。
PHP
4.2.1
之前的版本修改了傳入的數組本身,將其中的字元串值轉換成數值(大多數情況下都轉換成了零,根據具體制而定)。
語法
array_sum(array)
參數
描述
array
必需。規定輸入的數組。
例子1
復制代碼
代碼如下:
<?php
$a=array(0=>"5",1=>"15",2=>"25");
echo
array_sum($a);
?>
輸出:
45
例子2
復制代碼
代碼如下:
<?php
$a=array(0=>5,1=>15,2=>25);
echo
array_sum($a);
?>
輸出:
45
例子3
復制代碼
代碼如下:
<?php
$a=array(0=>5,1=>15.5,2=>25);
echo
array_sum($a);
?>
輸出:
45.5
例子4
復制代碼
代碼如下:
<?php
$a=array(0=>5,1=>"15s",2=>25);
echo
array_sum($a);
?>
輸出:
45
例子5
復制代碼
代碼如下:
<?php
$a=array(0=>5,1=>"s15s",2=>25);
echo
array_sum($a);
?>
輸出:
30
⑷ PHP中的常用數組操作方法有哪些
PHP中的常用數組操作方法(每種都給你舉個2個例子)
一、數組操作的基本函數
數組的鍵名和值
array_values($arr); 獲得數組的值
array_keys($arr);獲得數組的鍵名
數組的內部指針
current($arr); 返回數組中的當前單元
pos($arr); 返回數組中的當前單元
數組和變數之間的轉換
extract($arr);用於把數組中的元素轉換成變數導入到當前文件中,鍵名當作變數名,值作為變數值
註:(第二個參數很重要,可以看手冊使用)使用方法
echo$a;compact(var1,var2,var3);用給定的變數名創建一個數組
二、數組的分段和填充
數組的分段
array_slice($arr,0,3); 可以將數組中的一段取出,此函數忽略鍵名
array_splice($arr,0,3,array("black","maroon")); 可以將數組中的一段取出,與上個函數不同在於返回的序列從原數組中刪除
分割多個數組
array_chunk($arr,3,TRUE); 可以將一個數組分割成多個,TRUE為保留原數組的鍵名
數組的填充
array_pad($arr,5,'x'); 將一個數組填補到制定長度
三、數組與棧
array_push($arr,"apple","pear"); 將一個或多個元素壓入數組棧的末尾(入棧),返回入棧元素的個數
array_pop($arr); 將數組棧的最後一個元素彈出(出棧)
四、數組與列隊
array_shift($arr);數組中的第一個元素移出並作為結果返回(數組長度減1,其他元素向前移動一位,數字鍵名改為從零技術,文字鍵名不變)
array_unshift($arr,"a",array(1,2));在數組的開頭插入一個或多個元素
五、回調函數
array_walk($arr,'function','words'); 使用用戶函數對數組中的每個成員進行處理(第三個參數傳遞給回調函數function)
array_mpa("function",$arr1,$arr2); 可以處理多個數組(當使用兩個或更多數組時,他們的長度應該相同)
六、數組的排序
通過元素值對數組排序
sort($arr); 由小到大的順序排序(第二個參數為按什麼方式排序)忽略鍵名的數組排序
rsort($arr); 由大到小的順序排序(第二個參數為按什麼方式排序)忽略鍵名的數組排序
通過鍵名對數組排序
ksort($arr); 按照鍵名正序排序
krsort($arr); 按照鍵名逆序排序
七、數組的計算
數組元素的求和
array_sum($arr); 對數組內部的所有元素做求和運算
數組的合並
array_merge($arr1,$arr2); 合並兩個或多個數組(相同的字元串鍵名,後面的覆蓋前面的,相同的數字鍵名,後面的不會做覆蓋操作,而是附加到後面)
「+」$arr1+$arr2; 對於相同的鍵名只保留後一個
數組的差集
array_diff($arr1,$arr2); 返回差集結果數組
array_diff_assoc($arr1,$arr2,$arr3); 返回差集結果數組,鍵名也做比較
數組的交集
array_intersect($arr1,$arr2); 返回交集結果數組
array_intersect_assoc($arr1,$arr2); 返回交集結果數組,鍵名也做比較
八、其他的數組函數
range(0,12); 創建一個包含指定范圍單元的數組
array_unique($arr); 移除數組中重復的值,新的數組中會保留原始的鍵名
⑸ 到底什麼是PHP序列化
在PHP中,序列化用於存儲或傳遞 PHP 的值的過程中,同時不丟失其類型和結構。本文講述PHP序列化的四種方案,感興趣的可以了解一下
序列化是將變數轉換為可保存或傳輸的字元串的過程;反序列化就是在適當的時候把這個字元串再轉化成原來的變數使用。這兩個過程結合起來,可以輕松地存儲和傳輸數據,使程序更具維護性。
1、什麼是PHP序列化——serialize和unserialize函數
這兩個是序列化和反序列化PHP中數據的常用函數。
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//序列化數組$s = serialize($a);echo $s;//輸出結果:a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coconut";}
echo ''
;
//反序列化$o = unserialize($s);
print_r($o);
當數組值包含如雙引號、單引號或冒號等字元時,它們被反序列化後,可能會出現問題。為了克服這個問題,一個巧妙的技巧是使用base64_encode和base64_decode。
$obj = array();//序列化$s = base64_encode(serialize($obj)); //反序列化$original = unserialize(base64_decode($s));
但是base64編碼將增加字元串的長度。為了克服這個問題,可以和gzcompress一起使用。
//定義一個用來序列化對象的函數
function my_serialize( $obj ) { return base64_encode(gzcompress(serialize($obj))); }
//反序列化function my_unserialize($txt) { return unserialize(gzuncompress(base64_decode($txt))); }
2、什麼是PHP序列化——json_encode 和 json_decode
使用JSON格式序列化和反序列化是一個不錯的選擇:
使用json_encode和json_decode格式輸出要serialize和unserialize格式快得多。
JSON格式是可讀的。
JSON格式比serialize返回數據結果小。
JSON格式是開放的、可移植的。其他語言也可以使用它。
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//序列化數組$s = json_encode($a);echo $s;//輸出結果:{"a":"Apple","b":"banana","c":"Coconut"}
echo '
;
//反序列化$o = json_decode($s);
在上面的例子中,json_encode輸出長度比上個例子中serialize輸出長度顯然要短。[page]
3、什麼是PHP序列化——var_export 和 eval
var_export 函數把變數作為一個字元串輸出;eval把字元串當成PHP代碼來執行,反序列化得到最初變數的內容。
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//序列化數組$s = var_export($a , true);echo $s;//輸出結果: array ( 'a' => 'Apple', 'b' => 'banana', 'c' => 'Coconut', )
echo '
';
//反序列化eval('$my_var=' . $s . ';');
print_r($my_var);
4、什麼是PHP序列化——wddx_serialize_value 和 wddx deserialize
wddx_serialize_value函數可以序列化數組變數,並以XML字元串形式輸出。
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//序列化數組$s = wddx_serialize_value($a);echo $s;
//輸出結果(查看輸出字元串的源碼): ApplebananaCoconut
echo '
';
//反序列化$o = wddx_deserialize($s);
print_r($o);//輸出結果:Array ( [a] => Apple [b] => banana 1 => Coconut )
可以看出,XML標簽字元較多,導致這種格式的序列化還是佔了很多空間。
結論
上述所有的函數在序列化數組變數時都能正常執行,但運用到對象就不同了。例如json_encode序列化對象就會失敗。反序列化對象時,unserialize和eval將有不同的效果。
本篇《什麼是PHP序列化?這個知識點才是你應該了解到的用》到這里就已經結束了,小編一直認為,某一個編程軟體受歡迎是有一定原因的,首先吸引人的一定是其功能,環球網校的小編祝您PHP學習之路順利,如果你還想知道更多php知識,也可以點擊本站的其他文章進行學習。
⑹ php數組函數序列之array_splice() - 在數組任意位置插入元素
array_splice定義和用法
array_splice()
函數與
array_slice()
函數類似,選擇數組中的一系列元素,但不返回,而是刪除它們並用其它值代替。
如果提供了第四個參數,則之前選中的那些元素將被第四個參數指定的數組取代。
最後生成的數組將會返回。
語法
array_splice(array,offset,length,array)參數
描述
array
必需。規定數組。
offset
必需。數值。如果
offset
為正,則從輸入數組中該值指定的偏移量開始移除。如果
offset
為負,則從輸入數組末尾倒數該值指定的偏移量開始移除。
length
可選。數值。如果省略該參數,則移除數組中從
offset
到
結尾的所有部分。如果指定了
length
並且為正值,則移除這么多元素。如果指定了
length
且為負值,則移除從
offset
到數組末尾倒數
length
為止中間所有的元素。
array
被移除的元素由此數組中的元素替代。如果沒有移除任何值,則此數組中的元素將插入到指定位置。
提示和注釋
提示:如果函數沒有刪除任何元素
(length=0),則替代數組將從
start
參數的位置插入。(參見例子
3)
注釋:不保留替代數組中的鍵。
例子
1
復制代碼
代碼如下:
<?php
$a1=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
$a2=array(0=>"Tiger",1=>"Lion");
array_splice($a1,0,2,$a2);
print_r($a1);
?>
輸出:
Array
(
[0]
=>
Tiger
[1]
=>
Lion
[2]
=>
Horse
[3]
=>
Bird
)例子
2
與例子
1
相同,但是輸出返回的數組:
復制代碼
代碼如下:
<?php
$a1=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
$a2=array(0=>"Tiger",1=>"Lion");
print_r(array_splice($a1,0,2,$a2));
?>
輸出:
Array
(
[0]
=>
Dog
[1]
=>
Cat
)例子
3
length
參數設置為
0:
復制代碼
代碼如下:
<?php
$a1=array(0=>"Dog",1=>"Cat");
$a2=array(0=>"Tiger",1=>"Lion");
array_splice($a1,1,0,$a2);
print_r($a1);
?>
輸出:
Array
(
[0]
=>
Dog
[1]
=>
Tiger
[2]
=>
Lion
[3]
=>
Cat
)
⑺ php數組序列化a:1:{i:0;s:1:"1"} 的詳細解釋
1、首先創建好一個數組然後序列化,array("table" => member, "field" => 1,"rule" => -0 ,"cycle" => 24 ,"max" => 1 )。
⑻ php數組函數序列之sort() 對數組的元素值進行升序排序
sort()定義和用法
sort()
函數按升序對給定數組的值排序。
注釋:本函數為數組中的單元賦予新的鍵名。原有的鍵名將被刪除。
如果成功則返回
TRUE,否則返回
FALSE。
語法
sort(array,sorttype)參數
描述
array
必需。輸入的數組。
sorttype
可選。規定如何排列數組的值。可能的值:
SORT_REGULAR
-
默認。以它們原來的類型進行處理(不改變類型)。
SORT_NUMERIC
-
把值作為數字來處理
SORT_STRING
-
把值作為字元串來處理
SORT_LOCALE_STRING
-
把值作為字元串來處理,基於本地設置*。
*:該值是
PHP
4.4.0
和
5.0.2
新加的。在
PHP
6
之前,使用了系統的區域設置,可以用
setlocale()
來改變。自
PHP
6
起,必須用
i18n_loc_set_default()
函數。
例子
復制代碼
代碼如下:
<?php
$my_array
=
array("a"
=>
"Dog",
"b"
=>
"Cat",
"c"
=>
"Horse");
sort($my_array);
print_r($my_array);
?>
輸出:
Array
(
0]
=>
Cat
[1]
=>
Dog
[2]
=>
Horse
)