PH在P中,數組的每個元素都是由鍵/值組成的,通過元素的鍵來訪問對應的鍵的值。“關聯數組”指的是鍵名為字符串的數組,“索引”和“鍵名”指的是同一樣東西。“索引”多指數組的數字形式的下標。使用數組的處理函數,可以很方便地對數組中的每個元素的鍵和值進行操作,進而生成一個新數組。
①函數array_values()
array_values()函數的作用是返回數組中所有元素的值。使用非常容易,只有一個必選參數,規定傳入給定的數組,返回一個包含給定數組中所有值得數組。但不保留鍵名,被返回的數組將使用順序的數值鍵重新建立索引,從0開始並且以1遞增。適合用於數組中元素下表混亂的數組,或者可以將關聯數組轉化為索引數組。代碼如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14<?php
$contact
=
array
(
"ID"
=> 1,
"姓名"
=>
"高某"
,
"公司"
=>
"A公司"
,
"地址"
=>
"北京市"
,
"電話"
=>
"(010)98765432"
);
//array_values()函數傳入數組$contact 重新索引返回一個新數組
print_r(
array_values
(
$contact
));
print_r(
$contact
);
//原數組$contact內容元素不變
?>
該程序運行後的結果如下所示:
Array([0]=>1 [1]=>高某 [2]=>A公司 [3]=>北京市 [4]=>(010)98765432)
Array([ID]=>1 [姓名]=>高某 [公司]=>A公司 [地址]=> 北京市 [電話]=>(010)98765432)
②函數array_keys()
array_keys()函數的作用是返回數組中所有的鍵名。本函數中有一個必須參數和兩個可選參數,其函數的原型如下:
array array_keys(array input[,mixed search_value[,bool strict]])
如果指定了可選參數search_value,則只返回指定該值得鍵名,否則input數組中的所有鍵名都會被返回。自PHP5起,可以用strict參數來進行全等比較。需要傳入一個布爾型的值,FALSE為默認值不依賴類型。如果傳入TRUE值則根據類型返回帶有指定值得鍵名。函數array_keys()使用的代碼如下所示:
<?php
$lamp
=
array
(
"a"
=>
"Linux"
,
"b"
=>
"Apache"
,
"c"
=>
"MySQL"
,
"d"
=>
"php"
);
print_r(
array_keys
(
$lamp
));
//輸出Array([0]=>a [1]=>b [2]=>c)
print_r(
array_keys
(
$lamp
,
"Apache"
));
//使用第二個可選參數輸出:Array([0]=>b)
$a
=
array
(10,20,30,
"10"
);
//聲明一個數組,其中元素的值有整數10和字符串"10"
print_r(
array_keys
(
$a
,
"10"
,false));
//使用第三個參數(false)輸出:Array([0]=>0 [1]=>3)
$a
=
array
(10,20,30,
"10"
);
//聲明一個數組,其中元素的值有整數10和字符串"10"
print_r(
array_keys
(
$a
,
"10"
,true));
//使用第三個參數(true)輸出:Array([0]=>3)
?>
③函數in_array()
in_array()函數的作用是檢查數組中是否存在某個值,即在數組中搜索給定的值。本函數中有三個參數,前兩個參數為必須的,最後一個參數為可選的。其函數的原型如下:
bool in_array(mixed needle,array haystack[,bool strict])
第一個參數needle為規定要在數組中搜索的值,第二個參數haystack是規定要被搜索的數組,如果給定的值needle存在於數組haystack中則返回TRUE。如果第三個參數設置為TRUE,函數只有在元素存在於數組中且數據類型於給定值相同時才返回TRUE。如果沒有在數組中找到參數,函數返回FALSE。要注意如果needle參數是字符串,且strict參數設置為TRUE,則搜索區分大小寫。函數array_keys()使用的代碼如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35<?php
//in_array()函數的簡單使用形式
$os
=
array
(
"Mac"
,
"NT"
,
"Trix"
,
"Linux"
);
if
(in_array(
"Trix"
,
$os
)){
//這個條件成立,字符串Trix在數組$os中
echo
"Got Trix"
;
}
if
(in_array(
"mac"
,
$os
)){
//這個條件失敗,因為in_array()是區分大小寫的
echo
"Got mac"
;
}
//in_array嚴格類型檢查例子
$a
=
array
(
'1.10'
,12.4,1.13);
//第三個參數為true,所以字符串'12.4'和浮點數12.4類型不同
if
(in_array(
'12.4'
,
$a
,true)){
echo
"'12.4' found with strict check\n"
;
}
if
(in_array(1.13,
$a
,true)){
//這個條件成立,執行下面的語句
echo
"1.13 found with strict check\n"
;
}
//in_array()中還可以用數組當做第一個參數作為查詢條件
$a
=
array
(
array
(
'p'
,
'h'
),
array
(
'p'
,
'r'
),
'o'
);
if
(in_array(
array
(
'p'
,
'h'
),
$a
)){
//數組array('p','h')在數組$a中存在
echo
"'ph'was found\n"
;
}
if
(in_array(
array
(
'h'
,
'p'
),
$a
)){
//數組array('h','p')在數組$a中不存在
echo
"'hp'was found\n"
;
}
?>
也可以使用array_search()函數進行檢索。該函數與in_array()的參數相同,搜索給定的值,存在則返回相應的鍵名,也支持對數據類型的嚴格判斷。函數array_search()使用的代碼如下所示:
1 2 3 4 5 6 7<?php
$lamp
=
array
(
"a"
=>
"Linux"
,
"b"
=>
"Apache"
,
"c"
=>
"MySQL"
,
"d"
=>
"php"
);
echo
array_search
(
"php"
,
$lamp
);
//輸出:d(在數組$lamp中,存在字符串"php"則輸出下標d)
$a
=
array
(
"a"
=>
"8"
,
"b"
=>8,
"c"
=>
"8"
);
echo
array_search
(8,
$a
,ture);
//輸出b(嚴格按類型檢索,整型8對應的下標b)
?>
此外,使用array_key_exists()函數還可以檢查給定的鍵名或索引是否存在於數組中。因為在一個數組中鍵名必須是唯一的,所以不需要對其數據類型進行判斷。也可以使用isset()函數完成對數組中的鍵名進行檢查,單isset()對於數組中為NULL的值不會返回TRUE,而array_key_exists()會。代碼如下所示:
1 2 3 4 5 6 7 8 9 10 11 12<?php
$search_array
=
array
(
'first'
=>1,
'second'
=>4);
//聲明一個關聯數組,其中包含兩個元素
if
(
array_key_exists
(
'first'
,
$search_arry
)){
//檢查下標為first對應的元素是否在數組中
echo
"鍵名為'first'的元素在數組中"
;
}
$search_array
=
array
(
'first'
=> null,
'second'
=>4);
//聲明一個關聯數組,第二個元素的值為NULL
isset(
$search_array
[
'first'
]);
//用isset()檢索下標為first的元素返回false
array_key_exists
(
'first'
,
$search_array
);
//用array_key_exists()檢索下標為first的元素返回true
?>
④函數array_flip()
array_flip()的作用是交換數組中的鍵和值。返回一個反轉後的數組,如果同一個值出現了多次,則最後一個鍵名將作為它的值,覆蓋前面出現的元素。如果原數組中的值數據類型不是字符串或整數,函數將報錯。該函數只有一個參數,其函數原型如下:
array array_flip(trans)
參數是必須的,要求輸入一個要處理的數組,返回該數組中每個元素的鍵和值交換後的數組。函數array_flip()使用的代碼如下所示:
1 2 3 4 5 6 7 8 9 10<?php
$lamp
=
array
(
"os"
=>
"linux"
,
"WebServer"
=>
"Apache"
,
"Database"
=>
"MySQL"
,
"Language"
=>
"PHP"
);
//輸出:Array([linux]=>os [Apache]=>WebServer [MySQL]=>Database [PHP]=Language);
print_r(
array_flip
(
$lamp
));
//使用array_flip()函數交換數組中的鍵和值
//在數組中如果元素的值相同,則使用array_flip()會發生沖突
$trans
=
array
(
"a"
=>1,
"b"
=>1,
"c"
=2);
print_r(
array_flip
(
$trans
));
//現在$trans變成了:Array([1]=> b [2]=> c)
?>
⑤函數array_reverse()
array_reverse()作用是原數組中的元素順序翻轉,創建新的數組並返回。該函數有兩個參數,其函數的原型如下:
array array_reverse(array array[,bool preserve_keys])
第一個參數是必選項,接收一個數組作為輸入。第二個參數是可選項,如果指定為TRUE,則元素的鍵名保持不變,否則鍵名將會丟失。函數array_reverse()使用的代碼如下所示:
1 2 3 4 5 6 7<?php
$lamp
=
array
(
"OS"
=>
"Linux"
,
"WebServer"
=>
"Apache"
,
"Database"
=>
"MySQL"
,
"Language"
=>
"PHP"
);
//使用array_reverse()函數將數組$lamp中的元素的順序翻轉
print_r(
array_reverse
(
$lamp
));
//輸出的結果Array([Language]=>PHP [Database]=>MySQL [WebServer]=>Apache [OS]=>Linux)
?>
>> 本文固定鏈接: http://php.ncong.com/php_course/arry_function/key-value.html
#include<stdio.h>
int Compactlntegers(int a[], int *m)
{
int i,j,n;//這裡我使用C編譯器做的,所以修改了一下,
//如果是C++應該可以直接使用引用傳值,按你原來寫的應該可以修改主程序中n的值
n=*m;
for(i=0;i<n;i++)
{
if(a[i]==0)
{
for(j=i;j<n;j++)
a[j]=a[j+1];
n--;
}
}
*m=n;
return j;
}
void main()
{
int i,n,a[100];
printf("please input your number:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("please input the %d number:",i+1);
scanf("%d",&(a[i]));
}
Compactlntegers(a,&n);
for(i=0;i<n;i++)
{
printf("the %d number is: %d\n",i+1, a[i]);
}
}
代碼呢
是不是原本你的數組就是有重復值的