php關聯數組
『壹』 請問php中什麼是關聯數組
$array=array(1,2,3,'k'=>'6');
echo $array['k'];//輸出6,這就是關聯數組,注意K與6的關系
『貳』 如何添加,刪除PHP關聯數組
示例如下:
<?php
//定義一個數組
$arr=array();
//添加元素
$arr['name']='';
$arr['url']='com';
//刪除某個元素
unset($arr['url']);
//刪除數組
unset($arr);
『叄』 php判斷數組是關聯數組還是數值數組
具體思路:獲取數組的所有鍵:「array_keys()」
遍歷所有鍵判斷是否按照順序從0開始每個增一。
具體方法如下:
function _checkAssocArray($arr)
{
$index = 0;
foreach (array_keys($arr) as $key) {
if ($index++ != $key) return false;
}
return true;
}
邏輯很簡單,關聯數組的鍵不會全部都按照:0,1,2,3…的順序遞增,如果它確實這樣,那麼和數值數組沒有任何區別,相同處理即可。
網上有另外一種思路:將數組所有的鍵與一個(0,數組長度)的新數組求差,
『肆』 PHP怎樣給一個關聯數組的頭部增加一項
一維hash數組用array_merge可以的,多維混合下標且存在重復下標時,要慎用array_merge(還是逐一遍歷數組元素更妥當,lotusphp的db配置數組就遇到過),會出現意...
『伍』 php 如何將查詢的結果集放到關聯數組
$rs=mysql_query($sql);
while($row=mysql_fetch_array($rs)){
$rows[]=$row;
}
print_r($rows);
『陸』 php中怎樣向關聯數組的指定位置插入另一個數組的元素
這個功能需求來自於網站運營策略,舉倒子:
在一個排行列表中,默認有以下元素,順序有一定的依據,假設是按下載次數排列。
$rows = array(
array('name'=>'QQ2010'),
array('name'=>'QQ2009'),
array('name'=>'迅雷5'),
array('name'=>'飛信2010'),
array('name'=>'Kugoo2010'),
array('name'=>'TTplayer'),
array('name'=>'Firefox4.0'),
array('name'=>'美圖秀秀'),
array('name'=>'360safe'),
array('name'=>'Chrome6')
);
如果有一個客戶[可牛殺毒]想買花10元/元下我們第二個位置,可以大家想,直接把QQ2009替換掉不就完事了嗎。不,那樣的話用戶體驗並不好,明明QQ2009是一個下載次數比較多的軟體,為什麼在列表中卻沒有了呢。
其實我們真正的需求是把QQ2009以下的單元都往後推,騰出第二個位置來給[可牛殺毒]。如果頁面中只能顯示10個單元,那倒霉的就是[Chrome6]了,誰叫他們付費買我們的位置呢,呵呵。
再說到程序原理上來吧,PHP要實現這個需求,挺簡單,用數組函數array_splice就可以了,具體用法參照PHP手冊。
給一個完整的例子吧:
<?php
$rows = array(
array('name'=>'QQ2010',),
array('name'=>'QQ2009',),
array('name'=>'迅雷5',),
array('name'=>'飛信2010',),
array('name'=>'Kugoo2010',),
array('name'=>'TTplayer',),
array('name'=>'Firefox4.0',),
array('name'=>'美圖秀秀',),
array('name'=>'360safe',),
array('name'=>'Chrome6',),
);
$pop = array(
'2'=>array('name'=>'可牛殺毒'),
'5'=>array('name'=>'金山詞霸2010'),
);
foreach($pop as $key=>$p){
array_splice($rows, $key-1, 0, array($p));
}
var_mp($rows);
?>
最近的結果是:
array(12) {
[0]=>
array(1) {
["name"]=>
string(6) "QQ2010"
}
[1]=>
array(1) {
["name"]=>
string(8) "可牛殺毒"
}
[2]=>
array(1) {
["name"]=>
string(6) "QQ2009"
}
[3]=>
array(1) {
["name"]=>
string(5) "迅雷5"
}
[4]=>
array(1) {
["name"]=>
string(12) "金山詞霸2010"
}
[5]=>
array(1) {
["name"]=>
string(8) "飛信2010"
}
[6]=>
array(1) {
["name"]=>
string(9) "Kugoo2010"
}
[7]=>
array(1) {
["name"]=>
string(8) "TTplayer"
}
[8]=>
array(1) {
["name"]=>
string(10) "Firefox4.0"
}
[9]=>
array(1) {
["name"]=>
string(8) "美圖秀秀"
}
[10]=>
array(1) {
["name"]=>
string(7) "360safe"
}
[11]=>
array(1) {
["name"]=>
string(7) "Chrome6"
}
}
『柒』 php怎麼把關聯數組轉成索引數組
PHP和PERL、VB不同,其只有「數組」,沒有單獨的「關聯數組」類型,實際上PHP的所有數組都是關聯數組,當沒有指定鍵值的時候,鍵值為0、1、2……
php中定義數組的方法:
PHP定義數組的格式
數組名=array();
如:$aa=array();//這樣就定義了一個數組,
之後給元素賦值:
$aa[0]="9016";
$aa[1]="9017";
$aa[2]="9018";
PHP輸出數組的方法:
foreach($aa as $val)
{echo$val;}
也可以在定義數組時直接賦值
$aa=array(0=>"9016",1=>"9017";2=>"9018");
PHP的數組還可以用字元做下標,不一定要數字.
$aa["name"]="Joan";
$aa["num"]="9018";
$aa["email"]="[email protected]";
也可以這樣
$aa=array("name"=>"joan","num"=>"9018","email"=>"[email protected]");
將一個一維數組的元素也定義為數組,就是一個二維數組,
$aa=array(0=>"a1",1=>"a2");
$bb=array(0=>"b1",1=>"b2");
$cc=array(0=>$aa;1=>$bb);此時,$cc[0]也是一個數組,$cc[1]也是一個數組,$cc就是一個二維數組。
同理,三維,四維數組也可以繼續定義下去。
數組的元素不僅於數字和字元串,可以是類的對象。
『捌』 php 怎麼把索引數組賦值給關聯數組
在PHP中可以用關聯數組的形式表示如下:
$grade=array(name=>li kui,age=>163);
只要指出一點的就是=>,這個運算符非常的形象,一看就能夠明白:鍵為name的值是li kui;鍵為age的值是163。當然你也可以用以下的形式來創建關聯數組:
$grade["name"]=li kui;
$grade["age"]=16;
PHP中的多維數組
在多維數組中,主數組中的每個元素也是一個數組。在子數組中的每個元素也可以是數組,以此類推。同樣我們以學校里的班級為例來說明如何定義多維數組。
所謂多維數組,無非就是在「一維數組」中再加入一個數組,這就是嵌套吧。在學校里我們知道,一個年級可能有多個班級,如一班、二班、三班等,用多維數組表示如下:
$school=array(1=>array(name=>li kui,age=>163),
2=>array(name=>wu song,age=>183)
&&
);
如果你要訪問wu song,按如下的形式訪問即可:
print $school[2][name]; //輸出wu song
『玖』 php 多個一維關聯數組去重
因為不太了解你其他業務,這里通過對多個數組觀察發現,他們的鍵名都是一致的。所以有2個簡單的辦法
(1)先翻轉一維數組,然後進行合並,再翻轉回來
這里就不寫詳細代碼,寫下簡單過程
$array_a =array_flip($array_a);
這樣交換後的數組內容如下
Array
(
[DHL] =>carrier
)Array
(
[HKPT] =>carrier
)....
合並數組,使用array_merge,數組中有相同的字元串鍵名,則該鍵名後面的值將覆蓋前一個值
$mergeArray = array_merge($array_a,$array_b,$array_c...);
這樣得到一個數組,裡面的元素都是鍵名不重復的,內容如下
Array
(
[DHL] =>carrier
[HKPT] =>carrier
....
)
還原數組,這里如果要完全打散成一個一個的一維數組,就直接array_shift,同時翻轉回來
$array_a =array_shift($mergeArray);$array_a =array_flip($array_a);
$array_b =array_shift($mergeArray);$array_b=array_flip($array_b);
...
這里一個一個執行可以用for循環替代,數組中有多少個元素就執行多少次,
(2)最簡單的辦法,只從你提供的例子來說,鍵名都一樣,直接先去掉鍵名,然後組合成一個數字索引的數組,直接array-unique,再把鍵名放回去
如果有不清楚可以發消息
『拾』 PHP 關聯數組應用問題
不會報錯,如果你的程序報錯了那就是因為你的變數少了$,$Books,因為php的++操作會自動強制轉換成int,沒有初始化的會從0開始。 這種問題直接運行測試就能知道結果,少點上來問,多動手,別瞎猜。