主要是因為用 mysqli_fetch_all() 這函式返回的陣列是數字索引的二維陣列,有時候我們需要判斷乙個主鍵是否在這個二維陣列中就會遇到一些麻煩,常見的做法就是寫迴圈判斷,但是如果需要判斷多次的情況下,我們迴圈這麼多次會大大降低指令碼的效能,我們應該要如何改進?思路就是把子陣列中的鍵值作為陣列索引,然後直接用 if 或者 array_key_exists() 就可以判斷了。
<?php
//資料庫就不建立了,直接**模擬。
$data = [
0 => [
'id' => 5698,
'first_name' => 'bill',
'last_name' => 'gates',
],1 => [
'id' => 4767,
'first_name' => 'steve',
'last_name' => 'jobs',
],2 => [
'id' => 3809,
'first_name' => 'mark',
'last_name' => 'zuckerberg',
],];
//我們用 mysqli_fetch_all() 函式以後肯定會得到類似這樣的數值索引二維函式。子陣列先以關聯陣列演示。
//方法一
$arr = ;
foreach( $data as $key => $value)
echo '';
print_r($arr);
echo '';
/*輸出陣列
array
( [5698] => array
([id] => 5698
[first_name] => bill
[last_name] => gates
)[4767] => array
([id] => 4767
[first_name] => steve
[last_name] => jobs
)[3809] => array
([id] => 3809
[first_name] => mark
[last_name] => zuckerberg
))輸出以id為索引的二維陣列成功。
*//*
方法二利用 array_column() 函式
該函式返回輸入的多維陣列中所有子陣列中的某個索引的值組成的陣列。
輸入的必須是多維陣列(關聯陣列和索引陣列都可以),不然返回陣列為空陣列。
子陣列中的索引可以是字串索引也可以是數字索引。
第二個引數也可以是 null,此時將返回子陣列中所有元素(配合 index_key 引數來重置陣列鍵的時候,非常有用)。
第三個引數可以規定該子陣列某個索引(鍵名)的鍵值成為返回陣列中的鍵值對的鍵名。
返回陣列的鍵值為輸入的多維陣列中子陣列中的某個鍵名的鍵值,返回陣列的鍵名按以下規則
1.如果有第三個引數,則按第三個引數規定的值。
2.如果第三個引數為空,返回陣列的鍵名則是以 0 開始 的數字索引。
*/$arr = ;
$arr = array_column($data,null,'id');
//第二個引數設定為null,這樣返回陣列的鍵值為子陣列的所有元素。
//第三個引數設定為id,這樣返回陣列的鍵名為子陣列中id索引的鍵值。
echo '';
print_r($arr);
echo '';
/*輸出陣列
array
( [5698] => array
([id] => 5698
[first_name] => bill
[last_name] => gates
)[4767] => array
([id] => 4767
[first_name] => steve
[last_name] => jobs
)[3809] => array
([id] => 3809
[first_name] => mark
[last_name] => zuckerberg
))輸出以id為索引的二維陣列成功。
*/
順便測試了一下這兩個方法的效率。
<?php
$data = ;
for($n = 0;$n<100000;$n++)
$t1 = microtime(true);
foreach( $data as $key => $value)
//$arr = array_column($data,null,'id');
$t2 = microtime(true);
echo $t2-$t1;
/*陣列的元素個數在五千時,這兩個方法的執行效率一樣,
但是陣列元素個數在一萬時,下面的方法效率比上面方法的效率快了一倍左右。
*/
劍指offer 查詢二維有序陣列中是否含有某整數
二維陣列轉化成指標 int matrix 4 其中matrix 4 和 int matrix等價 bool isture sol.findtwodimention int matrix,4,4,70 面試題4 二維陣列中的查詢 題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按 ...
php求二維陣列,php 二維陣列求和
php 二維陣列求和 關注 117 答案 1 mip版 解決時間 2021 01 31 01 57 提問者情癌晚期 2021 01 30 01 47 array 194 array id 194 pos id 0 user id 4 site id 3 e ticket type diancard ...
根據二維陣列的某鍵值合併二維陣列
需求 根據date欄位的值將每天的type的pv uv的資料放到乙個維度裡,目標陣列仍為二維陣列 原始陣列 resource array array 0 array type hot list date 2016 07 18 pv 2,uv 2,1 array type trailer list d...