array('22',33,44,55,6)
in_array('22',$array)
//這樣就會有一個把‘22’轉換爲22的操作,再進行比較
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true
$test = 0;
$array = array('a', 'b', 'c');
if (in_array($test, $array, true)) {
echo 'in array';
} else {
echo 'no';
}
null 或 string | string | 將 NULL 轉換爲 "",進行數字或詞彙比較 |
bool 或 null | 任何其它類型 | 轉換爲 bool,FALSE < TRUE |
object | object | 內置類可以定義自己的比較,不同類不能比較,相同類和數組同樣方式比較屬性(PHP 4 中),PHP 5 有其自己的說明 |
string,resource 或 number | string,resource 或 number | 將字符串和資源轉換成數字,按普通數學比較 |
array | array | 具有較少成員的數組較小,如果運算數 1 中的鍵不存在於運算數 2 中則數組無法比較,否則挨個值比較(見下例) |
array | 任何其它類型 | array 總是更大 |
object | 任何其它類型 | object 總是更大 |
array_key_exists 和 in_array 查詢的東西都不一樣吧
array_key_exists 判斷是否有鍵值
array_key_exists(a,arr)->if(isset(arr[a]))就是true
而in_array 需要去遍歷值 遍歷到了才跳出循環
三種方式的語法區別
- empty: 參數爲0或爲NULL時(如上面列子),empty均返回TRUE,詳細情況可以參見empty官方手冊
- isset: 參數爲NULL時,返回FALSE,0與NULL在PHP中是有區別的,isset(0)返回TRUE
- array_key_exists: 純粹的判斷數組鍵值對是否存在,無論值是多少
所以,從準確性的角度來看,array_key_exists是最準確的!
三種方式的使用建議
(鑑於empty與isset性能類似,但是isset準確性較高,這裏就只比較isset與array_key_exists)
- 如果數組不可能出現值爲NULL的情況,建議使用isset
- 如果數組中經常出現值爲NULL的情況,建議使用array_key_exists
- 如果數組中可能出現值爲NULL,但是較少的情況,建議結合isset與array_key_exists使用,
- 如“if (isset($arr[‘key’]) || array_key_exists(‘key’, $arr)){/*do somthing*/}”。此方法兼顧了性能和準確性,但是代碼變長了。
1.數組key與value翻轉,通過isset判斷key是否存在於數組中
public static function inArray($item, $array) {
$flipArray = array_flip($array);
return isset($flipArray[$item]);
}
2、用implode連接,直接用strpos判斷
用implode函數+逗號連起來,直接用strpos判斷。php裏面字符串取位置速度非常快,尤其是在大數據量的情況下。不過需要注意的是首尾都要加"," ,這樣比較嚴謹。如: ,user1,user2,user3, 查找的時候,查,user1,。還有strpos要用!== false,因爲第一個會返回0。示例如下:
public static function inArray($item, $array) {
$str = implode(',', $array);
$str = ',' . $str . ',';
$item = ',' . $item . ',';
return false !== strpos($item, $str) ? true : false;
}
3、in_array 加第三個參數。
<?php
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_pop($stack);
print_r($stack);
?>
經過此操作後,$stack 將只有 3 個單元:
Array
(
[0] => orange
[1] => banana
[2] => apple
)
並且 rasberry 將被賦給 $fruit。$fruit = "raspberry";
<?php
$stack = array("orange", "banana");
array_push($stack, "apple", "raspberry");
print_r($stack);
?>
<?php
$queue = array("orange", "banana");
array_unshift($queue, "apple", "raspberry");
?>
Array
(
[0] => apple
[1] => raspberry
[2] => orange
[3] => banana
)
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
function test_alter(&$item1, $key, $prefix)
{
$item1 = "$prefix: $item1";
}
function test_print($item2, $key)
{
echo "$key. $item2<br />\n";
}
echo "Before ...:\n";
array_walk($fruits, 'test_print');
array_walk($fruits, 'test_alter', 'fruit');
echo "... and after:\n";
array_walk($fruits, 'test_print');
<?php
$sweet = array('a' => 'apple', 'b' => 'banana');
$fruits = array('sweet' => $sweet, 'sour' => 'lemon');
function test_print($item, $key)
{
echo "$key holds $item\n";
}
array_walk_recursive($fruits, 'test_print');
?>
以上例程會輸出:
a holds apple
b holds banana
sour holds lemon
注意上例中的鍵 'sweet' 並沒有顯示出來。任何其值爲數組的鍵都不會被傳遞到回調函數中去。
Example #1 array_map() 例子
<?php
function cube($n)
{
return($n * $n * $n);
}
$a = array(1, 2, 3, 4, 5);
$b = array_map("cube", $a);
print_r($b);
?>
這使得 $b 成爲:
Array
(
[0] => 1
[1] => 8
[2] => 27
[3] => 64
[4] => 125
)
Example #2 array_map() - 使用更多的數組
<?php
function show_Spanish($n, $m)
{
return("The number $n is called $m in Spanish");
}
function map_Spanish($n, $m)
{
return(array($n => $m));
}
$a = array(1, 2, 3, 4, 5);
$b = array("uno", "dos", "tres", "cuatro", "cinco");
$c = array_map("show_Spanish", $a, $b);
print_r($c);
$d = array_map("map_Spanish", $a , $b);
print_r($d);
?>
以上例程會輸出:
// printout of $c
Array
(
[0] => The number 1 is called uno in Spanish
[1] => The number 2 is called dos in Spanish
[2] => The number 3 is called tres in Spanish
[3] => The number 4 is called cuatro in Spanish
[4] => The number 5 is called cinco in Spanish
)
$name = 'caida';
$sax = 20;
$phone = '139...';
$arr = array('name', 'sax', 'phone');
$newarr = compact($arr);
print_r($newarr);
print_r(compact('name'));
$var_array = array("color" => "blue",
"size" => "medium",
"shape" => "sphere");
extract($var_array);
echo $size; #medium
$input_array = array('a', 'b', 'c', 'd', 'e');
print_r(array_chunk($input_array, 2));
print_r(array_chunk($input_array, 2, true));
<?php
function odd($var)
{
return($var % 2 == 1);
}
function even($var)
{
return($var % 2 == 0);
}
$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);
echo "Odd :\n";
print_r(array_filter($array1, "odd"));
echo "Even:\n";
print_r(array_filter($array2, "even"));
?>
Odd :
Array
(
[a] => 1
[c] => 3
[e] => 5
)
Even:
Array
(
[0] => 6
[2] => 8
[4] => 10
[6] => 12
)
array_merge() 將一個或多個數組的單元合併起來,一個數組中的值附加在前一個數組的後面。返回作爲結果的數組。如果輸入的數組中有相同的字符串鍵名,則該鍵名後面的值將覆蓋前一個值。然而,如果數組包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。如果只給了一個數組並且該數組是數字索引的,則鍵名會以連續方式重新索引。
$input = array("a", "b", "c", "d", "e");
$output = array_slice($input, 2); // returns "c", "d", and "e"
$output = array_slice($input, -2, 1); // returns "d"
$output = array_slice($input, 0, 3); // returns "a", "b", and "c"
// note the differences in the array keys
print_r(array_slice($input, 2, -1));
print_r(array_slice($input, 2, -1, true));
$a= array(aa, bb, cc,);
foreach($a as $k=>$v){
$s[$v] = $a;
array_splice($s[$v], $k, 1);
}
print_r($s);
Array
(
[aa] => Array([0] => bb
[1] => cc
)
[bb] => Array
([0] => aa
[1] => cc
)
[cc] => Array
([0] => aa
[1] => bb
)
)
只適用於索引數組。
1.索引下標會重建
$a= array(aa, bb, cc,);
array_splice($a,array_search('bb',$a),1);
print_r($a);
2.索引下標不會重建
$a= array(aa, bb, cc,);unset($a[1]);print_r($a);
適用於關聯索引,刪除關聯數組用unset
$a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse");
print_r($a);
unset($a[array_search("Cat",$a)]);//array_search("Cat",$a)按元素值返回鍵名。去除後保持索引
print_r($a);
2 、相同鍵名合併到一起
$a = array(
array('60'=>61),
array('60'=>62),
array('61'=>63),
array('61'=>64),
array('62'=>65),
array('63'=>66),
);
方法1:
$arr = array();
foreach($a as $key=>$v){
foreach ($v as $k=>$vv) {
$arr[$k][]=$vv;
}
}
Array
(
[60] => Array
([0] => 61
[1] => 62
)
[61] => Array
([0] => 63
[1] => 64
)
[62] => Array([0] => 65
)
[63] => Array
([0] => 66
)
)
方法2:
$result = array ();
foreach($a as $val) {
foreach($val as $k => $v) {
if( isset($result[$k])){
$result[$k] = $result[$k].','.$v;
}else{
$result [ $k ] = $v ;
}
}
}
結果:
Array
(
[ 60 ] = > 61 , 62
[ 61 ] = > 60 , 62
[ 62 ] = > 60 , 61
[ 63 ] = > 64
[ 64 ] = > 63
)
Array
(
[ 0 ] = > 60 , 61 , 62
[ 1 ] = > 61 , 60 , 62
[ 2 ] = > 62 , 60 , 61
[ 3 ] = > 63 , 64
[ 4 ] = > 64 , 63
)
處理函數:
//寫的比較好function a_array_unique( $ array )
{$out = array ();
foreach( $ array as $key = > $value ) {
$arr = explode( ',' , $value );
sort( $arr );
$sovalue = join( ',' , $arr );
if( ! in_array( $sovalue , $out )){
$out [ $key ] = $value ;
}
}
return$out ;
}
$ars = a_array_unique( $result );
結果:
Array
(
[ 0 ] = > 60 , 61 , 62
[ 3 ] = > 63 , 64
)
例如數組:Array ( [34] => 2 [7] => 100 ) PHP 如何獲取值最大的鍵值 這個例子中應該返回7
$arr=array(34=>2,7=>100);//定義一個數組
$t=max($arr);//獲取最大的值
$brr=array_flip($arr);//將數組鍵與值互換
echo $brr[$t];//輸出結果,即爲原數組最大值的鍵
6、PHP刪除數組中指定的值
$arr = array ( "a" , "b" , "c" , "d" );
function isHave ( $ var ){
if ( $ var != "b" ) return true ;
}
array_filter ( $arr , "isHave" );
7、數組按照中文排序
function utf8_array_asort( & $ array ) {
if ( ! isset ( $ array ) || ! is_array( $ array )) {
return false ;
}
foreach ( $ array as $k = > $v ) {
$ array [ $k ] = iconv( 'UTF-8' , 'GBK//IGNORE' , $v );
}
asort( $ array );
foreach ( $ array as $k = > $v ) {
$ array [ $k ] = iconv( 'GBK' , 'UTF-8//IGNORE' , $v );
}
return true ; }
8、定義php數組二維數組的值的和
$modelArr [ $ks ][ 'count' ] += $ms [ 'query_count' ]; 會報錯誤,說conut未定義。
$modelArr [ $ks ][ 'count' ] = array_sum( $ms [ 'query_count' ]);