1、對於一個二維數組,如下,我們現在需要遍歷所有的id和name,你會怎麼做呢?
0 =>
array (size=15)
'id' => string '1' (length=1)
'parent_id' => string '0' (length=1)
'name' => string '手機' (length=6)
'brief' => string 'mobile' (length=6)
'is_nav' => string '1' (length=1)
'banner' => string '' (length=0)
'keywords' => string '' (length=0)
'description' => string '' (length=0)
'redirect_url' => string '' (length=0)
'sort_order' => string '50' (length=2)
'status' => string '1' (length=1)
'created_at' => string '1422858315' (length=10)
'updated_at' => string '1422858315' (length=10)
'created_by' => string '0' (length=1)
'updated_by' => string '0' (length=1)
1 =>
array (size=15)
'id' => string '2' (length=1)
'parent_id' => string '0' (length=1)
'name' => string '電腦' (length=6)
'brief' => string 'computer' (length=8)
'is_nav' => string '1' (length=1)
'banner' => string '' (length=0)
'keywords' => string '' (length=0)
'description' => string '' (length=0)
'redirect_url' => string '' (length=0)
'sort_order' => string '50' (length=2)
'status' => string '1' (length=1)
'created_at' => string '1422858539' (length=10)
'updated_at' => string '1422858539' (length=10)
'created_by' => string '0' (length=1)
'updated_by' => string '0' (length=1)
2 =>
array (size=15)
'id' => string '3' (length=1)
'parent_id' => string '1' (length=1)
'name' => string '蘋果' (length=6)
'brief' => string 'iphone' (length=6)
'is_nav' => string '1' (length=1)
'banner' => string '' (length=0)
'keywords' => string '' (length=0)
'description' => string '' (length=0)
'redirect_url' => string '' (length=0)
'sort_order' => string '50' (length=2)
'status' => string '1' (length=1)
'created_at' => string '1422858566' (length=10)
'updated_at' => string '1422858566' (length=10)
'created_by' => string '0' (length=1)
'updated_by' => string '0' (length=1)
3 =>
array (size=15)
'id' => string '4' (length=1)
'parent_id' => string '1' (length=1)
'name' => string '三星' (length=6)
'brief' => string 'sansung' (length=7)
'is_nav' => string '1' (length=1)
'banner' => string '' (length=0)
'keywords' => string '' (length=0)
'description' => string '' (length=0)
'redirect_url' => string '' (length=0)
'sort_order' => string '50' (length=2)
'status' => string '1' (length=1)
'created_at' => string '1422858593' (length=10)
'updated_at' => string '1422858593' (length=10)
'created_by' => string '0' (length=1)
'updated_by' => string '0' (length=1)
4 =>
array (size=15)
'id' => string '5' (length=1)
'parent_id' => string '2' (length=1)
'name' => string '臺式機' (length=9)
'brief' => string '' (length=0)
'is_nav' => string '0' (length=1)
'banner' => string '' (length=0)
'keywords' => string '' (length=0)
'description' => string '臺式機電腦' (length=15)
'redirect_url' => string '' (length=0)
'sort_order' => string '50' (length=2)
'status' => string '1' (length=1)
'created_at' => string '1424857244' (length=10)
'updated_at' => string '1424857244' (length=10)
'created_by' => string '0' (length=1)
'updated_by' => string '0' (length=1)
5 =>
array (size=15)
'id' => string '6' (length=1)
'parent_id' => string '2' (length=1)
'name' => string '筆記本' (length=9)
'brief' => string '' (length=0)
'is_nav' => string '0' (length=1)
'banner' => string '' (length=0)
'keywords' => string '' (length=0)
'description' => string '筆記本電腦' (length=15)
'redirect_url' => string '' (length=0)
'sort_order' => string '50' (length=2)
'status' => string '1' (length=1)
'created_at' => string '1424857273' (length=10)
'updated_at' => string '1424857273' (length=10)
'created_by' => string '0' (length=1)
'updated_by' => string '0' (length=1)
6 =>
array (size=15)
'id' => string '7' (length=1)
'parent_id' => string '2' (length=1)
'name' => string '上網本' (length=9)
'brief' => string '' (length=0)
'is_nav' => string '0' (length=1)
'banner' => string '' (length=0)
'keywords' => string '' (length=0)
'description' => string '' (length=0)
'redirect_url' => string '' (length=0)
'sort_order' => string '50' (length=2)
'status' => string '1' (length=1)
'created_at' => string '1424857318' (length=10)
'updated_at' => string '1424857318' (length=10)
'created_by' => string '0' (length=1)
'updated_by' => string '0' (length=1)
常規做法,比如上面的二維數組爲$rision
<?php
$rision=[
0 =>
array(
'id' => '1',
'parent_id' => '0',
'name' => '手機' ,
'brief' => 'mobile' ,
'is_nav' => '1' ,
'banner' => '' ,
'keywords' => '' ,
'description' => '' ,
'redirect_url' => '' ,
'sort_order' => '50' ,
'status' => '1' ,
'created_at' => '1422858315' ,
'updated_at' => '1422858315' ,
'created_by' => '0' ,
'updated_by' => '0'
),
1 =>
array (
'id' => '2' ,
'parent_id' => '0' ,
'name' => '電腦' ,
'brief' => 'computer' ,
'is_nav' => '1' ,
'banner' => '' ,
'keywords' => '' ,
'description' => '' ,
'redirect_url' => '' ,
'sort_order' => '50' ,
'status' => '1' ,
'created_at' => '1422858539' ,
'updated_at' => '1422858539' ,
'created_by' => '0' ,
'updated_by' => '0'
),
2 =>
array (
'id' => '3' ,
'parent_id' => '1' ,
'name' => '蘋果' ,
'brief' => 'iphone' ,
'is_nav' => '1' ,
'banner' => '' ,
'keywords' => '' ,
'description' => '' ,
'redirect_url' => '' ,
'sort_order' => '50' ,
'status' => '1' ,
'created_at' => '1422858566' ,
'updated_at' => '1422858566' ,
'created_by' => '0' ,
'updated_by' => '0'
),
3 =>
array (
'id' => '4' ,
'parent_id' => '1' ,
'name' => '三星' ,
'brief' => 'sansung' ,
'is_nav' => '1' ,
'banner' => '' ,
'keywords' => '' ,
'description' => '' ,
'redirect_url' => '' ,
'sort_order' => '50' ,
'status' => '1' ,
'created_at' => '1422858593' ,
'updated_at' => '1422858593' ,
'created_by' => '0' ,
'updated_by' => '0'
),
4 =>
array (
'id' => '5' ,
'parent_id' => '2' ,
'name' => '臺式機' ,
'brief' => '' ,
'is_nav' => '0' ,
'banner' => '' ,
'keywords' => '' ,
'description' => '臺式機電腦' ,
'redirect_url' => '' ,
'sort_order' => '50' ,
'status' => '1' ,
'created_at' => '1424857244' ,
'updated_at' => '1424857244' ,
'created_by' => '0' ,
'updated_by' => '0'
),
5 =>
array (
'id' => '6' ,
'parent_id' => '2' ,
'name' => '筆記本' ,
'brief' => '' ,
'is_nav' => '0' ,
'banner' => '' ,
'keywords' => '' ,
'description' => '筆記本電腦' ,
'redirect_url' => '' ,
'sort_order' => '50' ,
'status' => '1' ,
'created_at' => '1424857273' ,
'updated_at' => '1424857273' ,
'created_by' => '0' ,
'updated_by' => '0'
),
6 =>
array (
'id' => '7' ,
'parent_id' => '2' ,
'name' => '上網本' ,
'brief' => '' ,
'is_nav' => '0' ,
'banner' => '' ,
'keywords' => '' ,
'description' => '' ,
'redirect_url' => '' ,
'sort_order' => '50' ,
'status' => '1' ,
'created_at' => '1424857318' ,
'updated_at' => '1424857318' ,
'created_by' => '0' ,
'updated_by' => '0'
)
];
$grs = array('id','name');
foreach($rision as $key=>$value)
{
for($i=0;$i<2;$i++)
{
$spse[$key][$i]=$value[$grs[$i]]; //爲了讓數組$spse[][],從$spse[1][1],開始,令$key=$key+1;
}
}
var_dump($spse);
輸出結果如下:
F:\wamp\www\test\array.php:138:
array (size=7)
0 =>
array (size=2)
0 => string '1' (length=1)
1 => string '手機' (length=6)
1 =>
array (size=2)
0 => string '2' (length=1)
1 => string '電腦' (length=6)
2 =>
array (size=2)
0 => string '3' (length=1)
1 => string '蘋果' (length=6)
3 =>
array (size=2)
0 => string '4' (length=1)
1 => string '三星' (length=6)
4 =>
array (size=2)
0 => string '5' (length=1)
1 => string '臺式機' (length=9)
5 =>
array (size=2)
0 => string '6' (length=1)
1 => string '筆記本' (length=9)
6 =>
array (size=2)
0 => string '7' (length=1)
1 => string '上網本' (length=9)
2、這是一般寫法,接下來我們介紹一種高逼格的寫法,其實他是PHP中的內置函數,寫法很簡單,數組不變,這裏不貼了,複製上面的即可
程序如下:
function getValue($array, $key, $default = null){
if (is_array($array) && array_key_exists($key,$array)) {
return $array[$key];
}
}
foreach ($rision as $element) {
$id = getValue($element,'id');
$name = getValue($element,'name');
var_dump($id.$name);
}
程序運行結果如下:
F:\wamp\www\test\array.php:147:string '1手機' (length=7)
F:\wamp\www\test\array.php:147:string '2電腦' (length=7)
F:\wamp\www\test\array.php:147:string '3蘋果' (length=7)
F:\wamp\www\test\array.php:147:string '4三星' (length=7)
F:\wamp\www\test\array.php:147:string '5臺式機' (length=10)
F:\wamp\www\test\array.php:147:string '6筆記本' (length=10)
F:\wamp\www\test\array.php:147:string '7上網本' (length=10)
3、假如我們要id作爲鍵、name作爲值,此處恰巧id是數字,所以有很多便捷的方法,我們考慮id不是數字的情況,下面介紹一種通用的用法
程序如下:
$result[$id] = $name;
然後輸出結果如下:
array (size=7)
1 => string '手機' (length=6)
2 => string '電腦' (length=6)
3 => string '蘋果' (length=6)
4 => string '三星' (length=6)
5 => string '臺式機' (length=9)
6 => string '筆記本' (length=9)
7 => string '上網本' (length=9)
上面我們只介紹了數組的檢索方式,關於對象其原理是一樣的,這裏就不詳細解釋了,下面會貼出源碼的,接下來我們就要封裝我們的方法了。在整個框架中,有些方法是常用的,所以我們可以使得這些方法變爲靜態方法,然後直接訪問。
public static function getValue($array, $key, $default = null)
{
if ($key instanceof \Closure) {
return $key($array, $default);
}
if (is_array($array) && array_key_exists($key, $array)) {
var_dump($array[$key]);
return $array[$key];
}
if (($pos = strrpos($key, '.')) !== false) {
$array = static::getValue($array, substr($key, 0, $pos), $default);
$key = substr($key, $pos + 1);
}
if (is_object($array)) {
return $array->$key;
} elseif (is_array($array)) {
return array_key_exists($key, $array) ? $array[$key] : $default;
} else {
return $default;
}
}
public static function getColumn($array, $name, $keepKeys = true)
{
$result = [];
if ($keepKeys) {
foreach ($array as $k => $element) {
$result[$k] = static::getValue($element, $name);
}
} else {
foreach ($array as $element) {
$result[] = static::getValue($element, $name);
}
}
return $result;
}
//將上面的方法些到一個類總,然後就可以像下面一樣調用了
類名::map($rision, 'id', 'name');
通往成功的方法有很多,如何高效、快速、準確地通往纔是我們值得思考的問題,有的人工作了很多年,但是他寫程序實現的方法依然很low,技術就是一點一滴積攢起來的,寫出與衆不同的代碼,寫出高質量的代碼,寫出BAT大咖們的代碼,加油吧,勝利就在前方!