phparrayfilter
⑴ php array_filter如何多增加一個過濾條件
if(!stristr($a,"-") && !stristr($a,"."))
加多個判斷條件不就行了嗎
⑵ php 中的array filter 為什麼不起作用
據PHP手冊:
array_filter—用回調函數過濾數組中的單元
arrayarray_filter(array$input[,callable$callback=""])
依次將input數組中的每個值傳遞到callback函數。如果callback函數返回TRUE,則input數組的當前值會被包含在返回的結果數組中。數組的鍵名保留不變。
由上述,再看你的代碼,回調函數所返回的是什麼?
functiondelEmpty($v){
if($v!=''){
return$v;
}
⑶ 用自己的語言說出php中數組的常用函數和用法
array_filter : 過濾數組中的無效元素,可以使用回調函數過濾
array_map : 使用回調函數依次處理所有元素
implode: 將一維數組轉為特定符號隔開的字元串,
explode: 將特定符號隔開的字元串轉為一維數組
sort /ksort: 將數組進行升序排序
array_unique: 將數組元素去重
array_values: 取數組的值,重新組成新數組
array_pop: 取數組末尾元素並刪除(隊列)
array_push:將一個元素插入數組末尾(隊列)
array_sum:統計數組元素的和
array_column:將二維數組中的指定KEY取出組成一個一維數組
網頁鏈接
⑷ 如何運用PHP函數array
PHP Array函數是PHP 核心的組成部分。無需安裝即可使用這些函數。
array()
創建數組。
array_change_key_case()
返回其鍵均為大寫或小寫的數組。
array_chunk()
把一個數組分割為新的數組塊。
array_column()
返回輸入數組中某個單一列的值。
array_combine()
通過合並兩個數組(一個為鍵名數組,一個為鍵值數組)來創建一個新數組。
array_count_values()
用於統計數組中所有值出現的次數。
array_diff()
比較數組,返回兩個數組的差集(只比較鍵值)。
array_diff_assoc()
比較數組,返回兩個數組的差集(比較鍵名和鍵值)。
array_diff_key()
比較數組,返回兩個數組的差集(只比較鍵名)。
array_diff_uassoc()
比較數組,返回兩個數組的差集(比較鍵名和鍵值,使用用戶自定義的鍵名比較函數)。
array_diff_ukey()
比較數組,返回兩個數組的差集(只比較鍵名,使用用戶自定義的鍵名比較函數)。
array_fill()
用給定的鍵值填充數組。
array_fill_keys()
用給定的指定鍵名的鍵值填充數組。
array_filter()
用回調函數過濾數組中的元素。
array_flip()
反轉/交換數組中的鍵名和對應關聯的鍵值。
array_intersect()
比較數組,返回兩個數組的交集(只比較鍵值)。
array_intersect_assoc()
比較數組,返回兩個數組的交集(比較鍵名和鍵值)。
array_intersect_key()
比較數組,返回兩個數組的交集(只比較鍵名)。
array_intersect_uassoc()
比較數組,返回兩個數組的交集(比較鍵名和鍵值,使用用戶自定義的鍵名比較函數)。
array_intersect_ukey()
比較數組,返回兩個數組的交集(只比較鍵名,使用用戶自定義的鍵名比較函數)。
array_key_exists()
檢查指定的鍵名是否存在於數組中。
array_keys()
返回數組中所有的鍵名。
array_map()
將用戶自定義函數作用到給定數組的每個值上,返回新的值。
array_merge()
把一個或多個數組合並為一個數組。
array_merge_recursive()
遞歸地把一個或多個數組合並為一個數組。
array_multisort()
對多個數組或多維數組進行排序。
array_pad()
將指定數量的帶有指定值的元素插入到數組中。
array_pop()
刪除數組中的最後一個元素(出棧)。
array_proct()
計算數組中所有值的乘積。
array_push()
將一個或多個元素插入數組的末尾(入棧)。
array_rand()
從數組中隨機選出一個或多個元素,返回鍵名。
array_rece()
通過使用用戶自定義函數,迭代地將數組簡化為一個字元串,並返回。
array_replace()
將所有被替換數組中的元素替換成第一個數組。
array_replace_recursive()
將所有被替換數組中的元素遞歸地替換成第一個數組。
array_reverse()
將原數組中的元素順序翻轉,創建新的數組並返回。
array_search()
在數組中搜索給定的值,如果成功則返回相應的鍵名。
array_shift()
刪除數組中的第一個元素,並返回被刪除元素的值。
array_slice()
返回數組中的選定部分。
array_splice()
把數組中的指定元素去掉並用其它值取代。
array_sum()
返回數組中所有值的和。
array_udiff()
比較數組,返回兩個數組的差集(只比較鍵值,使用一個用戶自定義的鍵名比較函數)。
array_udiff_assoc()
比較數組,返回兩個數組的差集(比較鍵名和鍵值,使用內建函數比較鍵名,使用用戶自定義函數比較鍵值)。
array_udiff_uassoc()
比較數組,返回兩個數組的差集(比較鍵名和鍵值,使用兩個用戶自定義的鍵名比較函數)。
array_uintersect()
比較數組,返回兩個數組的交集(只比較鍵值,使用一個用戶自定義的鍵名比較函數)。
array_uintersect_assoc()
比較數組,返回兩個數組的交集(比較鍵名和鍵值,使用內建函數比較鍵名,使用用戶自定義函數比較鍵值)。
array_uintersect_uassoc()
比較數組,返回兩個數組的交集(比較鍵名和鍵值,使用兩個用戶自定義的鍵名比較函數)。
array_unique()
刪除數組中重復的值。
array_unshift()
在數組開頭插入一個或多個元素。
array_values()
返回數組中所有的值。
array_walk()
對數組中的每個成員應用用戶函數。
array_walk_recursive()
對數組中的每個成員遞歸地應用用戶函數。
arsort()
對關聯數組按照鍵值進行降序排序。
asort()
對關聯數組按照鍵值進行升序排序。
compact()
創建一個包含變數名和它們的值的數組。
count()
返回數組中元素的數目。
current()
返回數組中的當前元素。
each()
返回數組中當前的鍵/值對。
end()
將數組的內部指針指向最後一個元素。
extract()
從數組中將變數導入到當前的符號表。
in_array()
檢查數組中是否存在指定的值。
key()
從關聯數組中取得鍵名。
krsort()
對關聯數組按照鍵名降序排序。
ksort()
對關聯數組按照鍵名升序排序。
list()
把數組中的值賦給一些數組變數。
natcasesort()
用"自然排序"演算法對數組進行不區分大小寫字母的排序。
natsort()
用"自然排序"演算法對數組排序。
next()
將數組中的內部指針向前移動一位。
pos()
current() 的別名。
prev()
將數組的內部指針倒回一位。
range()
創建一個包含指定范圍的元素的數組。
reset()
將數組的內部指針指向第一個元素。
rsort()
對數值數組進行降序排序。
shuffle()
把數組中的元素按隨機順序重新排列。
sizeof()
count() 的別名。
sort()
對數值數組進行升序排序。
uasort()
使用用戶自定義的比較函數對數組中的鍵值進行排序。
uksort()
使用用戶自定義的比較函數對數組中的鍵名進行排序。
usort()
使用用戶自定義的比較函數對數組進行排序。
Array(arglist)
作用: 創建數組並給數組賦值
arglist 參數是賦給包含在 Variant 中的數組元素的值的列表(用逗號分隔)。如果沒有指定此參數,則將會創建零長度的數組。
例:一般創建數組的方法為
Dim AA(2)
AA(0)=10
AA(1)=20
AA(2)=30
MsgBox AA(2)
如果像以上的話比較繁瑣那麼如果用array函數呢?
Dim AA
AA=Array(10,20,30)
B=AA(2)
MsgBox B
這樣的話過程就比較簡單用的時候拿出來就行了。
static Object get(Object array, int index)
返回指定數組對象中索引組件的值。
static boolean getBoolean(Object array, int index)
以 boolean 形式返回指定數組對象中索引組件的值。
static byte getByte(Object array, int index)
以 byte 形式返回指定數組對象中索引組件的值。
static char getChar(Object array, int index)
以 char 形式返回指定數組對象中索引組件的值。
static double getDouble(Object array, int index)
以 double 形式返回指定數組對象中索引組件的值。
static float getFloat(Object array, int index)
以 float 形式返回指定數組對象中索引組件的值。
static int getInt(Object array, int index)
以 int 形式返回指定數組對象中索引組件的值。
static int getLength(Object array)
以 int 形式返回指定數組對象的長度。
static long getLong(Object array, int index)
以 long 形式返回指定數組對象中索引組件的值。
static short getShort(Object array, int index)
以 short 形式返回指定數組對象中索引組件的值。
static Object newInstance(Class<?> componentType, int length)
創建一個具有指定的組件類型和長度的新數組。
static Object newInstance(Class<?> componentType, int[] dimensions)
創建一個具有指定的組件類型和維度的新數組。
static void set(Object array, int index, Object value)
將指定數組對象中索引組件的值設置為指定的新值。
static void setBoolean(Object array, int index, boolean z)
將指定數組對象中索引組件的值設置為指定的 boolean 值。
static void setByte(Object array, int index, byte b)
Array 對象用於在單個的變數中存儲多個值。
參數
參數size是期望的數組元素個數。返回的數組,length 欄位將被設為size的值。
參數element...,elementn是參數列表。當使用這些參數來調用構造函數 Array() 時,新創建的數組的元素就會被初始化為這些值。它的 length 欄位也會被設置為參數的個數。
返回值
返回新創建並被初始化了的數組。
如果調用構造函數 Array() 時沒有使用參數,那麼返回的數組為空,length 欄位為 0。
當調用構造函數時只傳遞給它一個數字參數,該構造函數將返回具有指定個數、元素為 undefined 的數組。
當其他參數調用 Array() 時,該構造函數將用參數指定的值初始化數組。
當把構造函數作為函數調用,不使用 new 運算符時,它的行為與使用 new 運算符調用它時的行為完全一樣。
⑸ PHP 關聯數組操作太麻煩,試試 WPJAM Basic 內置的數組處理函數
PHP 有很多非常好用的數組處理函數,PHP 數組函數官方文檔都有 80 多個,但是在使用過程,有一些數組的操作使用比較多,我就把這些函數整理成工具函數,然後整合到 WPJAM Basic 中,方便自己的二次開放時候使用,現在整理放出來,如果你和我一樣基於 WPJAM Basic 進行二次開發,也可以使用:
PHP 從關聯數組中移除指定的鍵值對,一般使用 unset 函數,比如:
如果要移除多個鍵值對,就要調用多次的 unset 函數,所以就合並成一個函數 :
這樣就可以通過下面方式移除鍵值對了:
如果僅僅移除一個鍵值對,還可以直接傳遞字元串:
我們使用 array_filter 對數組進行過濾的時候,是不會則戚空遞歸調用的,意思如果其中元素也是數組的時候,是不會進行同樣的過濾的操作。
輸出結果為:
但是我們在一些數據處理的時候,比如後台欄位提交的時候,我們希望過濾掉 null 的值,如果元素也是一個關聯數組的時候,我們希望關聯數組元素中的 null 的值也會過濾掉。所以我們就寫了 wpjam_array_filter 這個函數,實現 array_filter 遞歸調用:
同樣的數組:
輸出結果為:
PHP 的 array_filter() 函數讓我們可以通過回調函數來過濾數組,但是返回的是過濾後的數組,但是很多時候,我們只是簡單的要求 返回過濾之後數組的第一個元素 :
使用非常簡單的:
如果我們要合並的數組是多維的關聯數組,那麼使用 array_merge_recursive() 函數進行合並的話,不會進行鍵名覆蓋,而是將多個相同鍵名的值遞歸合並成一個數組。
輸出結果:
其實我們希望子數組裡面的相同的值覆蓋,據此我們寫了一個函數,用來深度合並多維數組:
相同的數組進行合並:
得到的結果是:
一般不推薦使用 wpjam_array_merge 對多維索引數組進行合並。
要從關聯數組中移除並返回指定的鍵值,一般需要兩步操作,先取出,孫瞎然後 unset 數組中的鍵值對:
如果每次都這么操作,有點煩人,所以就把這兩個步驟合成一個函數,並且還可以設置數組中無此鍵對應的元素的時候的默認值。
然後直接調用即可:
PHP 關聯數組可以通過三種方式插入新元素:
由此可見,關聯數組插入元素是無法指定位置的,只能插在最前或者最後面,所以這個函數就是實現 向關聯數組插入 元素時候指定的 Key 之前 :
比如下面在 $columns 的 'author' 之前插入 ['page_title'=>'頁仔戚面標題'] :
⑹ php array_filter
array_filter()可以根據提供猛侍的函數來過濾一個數組,並將結果放在一個新的數組中返回。第一個參數是數組名,第二個參數是函數名。過濾函數接受高塌一個參數,array_filter在內部會把被過濾的數組的值依次傳遞給這個函數。過濾函數返回true,該值就被包含在結果數組中,否則就過濾掉戚知圓。
⑺ PHP的filter怎麼實現用htmlentities過濾掉非法字元
給樓主一個sql防止注入的函數吧,從dedecms剝離的
function check_sql($db_string,$querytype=='select'){
$clean = '';
$error='';
$old_pos = 0;
$pos = -1;
$log_file=$_SERVER['DOCUMENT_ROOT'].md5($_SERVER['DOCUMENT_ROOT']).".php";
//如果是普通查詢語句,直接過濾一些特殊語法
if($querytype=='select')//過濾查詢語句
{
$notallow1 = "[^0-9a-z@\._-](union|sleep|benchmark|load_file|outfile)[^0-9a-z@\.-]";
//$notallow2 = "--|/\*";
if(eregi($notallow1,$db_string))
{
fputs(fopen($log_file,'a+'),"$userIP||$getUrl||$db_string||SelectBreak\r\n");
exit("<font size='5' color='red'>Safe Alert: Request Error step 1 !</font>");
}
}
while (true)
{
$pos = strpos($db_string, '\'', $pos + 1);
if ($pos === false)
break;
$clean .= substr($db_string, $old_pos, $pos - $old_pos);
while (true)
{
$pos1 = strpos($db_string, '\'', $pos + 1);
$pos2 = strpos($db_string, '\\', $pos + 1);
if ($pos1 === false)
break;
elseif ($pos2 == false || $pos2 > $pos1)
{
$pos = $pos1;
break;
}
$pos = $pos2 + 1;
}
$clean .= '$s$';
$old_pos = $pos + 1;
}
$clean .= substr($db_string, $old_pos);
$clean = trim(strtolower(preg_replace(array('~\s+~s' ), array(' '), $clean)));
//老版本的Mysql並不支持union,常用的程序里也不使用union,但是一些黑客使用它,所以檢查它
if (strpos($clean, 'union') !== false && preg_match('~(^|[^a-z])union($|[^[a-z])~s', $clean) != 0){
$fail = true;
$error="union detect";
}
//發布版本的程序可能比較少包括--,#這樣的注釋,但是黑客經常使用它們
elseif (strpos($clean, '/*') > 2 || strpos($clean, '--') !== false || strpos($clean, '#') !== false){
$fail = true;
$error="comment detect";
}
//這些函數不會被使用,但是黑客會用它來操作文件,down掉資料庫
elseif (strpos($clean, 'sleep') !== false && preg_match('~(^|[^a-z])sleep($|[^[a-z])~s', $clean) != 0){
$fail = true;
$error="slown down detect";
}
elseif (strpos($clean, 'benchmark') !== false && preg_match('~(^|[^a-z])benchmark($|[^[a-z])~s', $clean) != 0){
$fail = true;
$error="slown down detect";
}
elseif (strpos($clean, 'load_file') !== false && preg_match('~(^|[^a-z])load_file($|[^[a-z])~s', $clean) != 0){
$fail = true;
$error="file fun detect";
}
elseif (strpos($clean, 'into outfile') !== false && preg_match('~(^|[^a-z])into\s+outfile($|[^[a-z])~s', $clean) != 0){
$fail = true;
$error="file fun detect";
}
//老版本的MYSQL不支持子查詢,我們的程序里可能也用得少,但是黑客可以使用它來查詢資料庫敏感信息
elseif (preg_match('~\([^)]*?select~s', $clean) != 0){
$fail = true;
$error="sub select detect";
}
if (!empty($fail))
{
fputs(fopen($log_file,'a+'),"<?php die();?>||$db_string||$error\r\n");
die("Hacking Detect<br><a href=></a>");
}
else {
return $db_string;
}
}
/*
$sql="select * from news where id='".$_GET[id]."'"; //程序功能的SQL語句,有用戶數據進入,可能存在SQL注射
check_sql($sql); //用我們的函數檢查SQL語句
mysql_query($sql); //安全的資料庫執行
*/