第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問下在數(shù)組中搜索給定的值,如果成功則返回首個相應的鍵名

請問下在數(shù)組中搜索給定的值,如果成功則返回首個相應的鍵名

C PHP
暮色呼如 2022-04-16 15:11:43
在數(shù)組中搜索給定的值,如果成功則返回首個相應的鍵名
查看完整描述

2 回答

?
不負相思意

TA貢獻1777條經(jīng)驗 獲得超10個贊

array_search
(PHP 4 >= 4.0.5, PHP 5, PHP 7)
array_search — 在數(shù)組中搜索給定的值,如果成功則返回首個相應的鍵名
說明
array_search ( mixed $needle , array $haystack [, bool $strict = false ] ) : mixed
大海撈針,在大海(haystack)中搜索針( needle 參數(shù))。
參數(shù)
needle
搜索的值。
注意:
如果 needle 是字符串,則比較以區(qū)分大小寫的方式進行。
haystack
這個數(shù)組。
strict
如果可選的第三個參數(shù) strict 為 true,則 array_search() 將在 haystack 中檢查完全相同的元素。 這意味著同樣嚴格比較 haystack 里 needle 的 類型,并且對象需是同一個實例。
返回值
如果找到了 needle 則返回它的鍵,否則返回 false。
如果 needle 在 haystack 中出現(xiàn)不止一次,則返回第一個匹配的鍵。要返回所有匹配值的鍵,應該用 array_keys() 加上可選參數(shù) search_value 來代替。
警告
此函數(shù)可能返回布爾值 false,但也可能返回等同于 false 的非布爾值。請閱讀 布爾類型章節(jié)以獲取更多信息。應使用 === 運算符來測試此函數(shù)的返回值。
更新日志
版本 說明
5.3.0 As with all internal PHP functions as of 5.3.0, array_search() returns null if invalid parameters are passed to it.



查看完整回答
反對 回復 2022-04-19
?
桃花長相依

TA貢獻1860條經(jīng)驗 獲得超8個贊

巧用 PHP 數(shù)組函數(shù)

程序猿的生活1
09-10
0x00 前言

PHP 的數(shù)組是一種很強大的數(shù)據(jù)類型,與此同時 PHP 內(nèi)置了一系列與數(shù)組相關的函數(shù)可以很輕易的實現(xiàn)日常開發(fā)的功能。但是我發(fā)現(xiàn)好像很多小伙伴都忽略了內(nèi)置函數(shù)的作用(比如我自己就編寫過一些有關數(shù)組操作的代碼然后發(fā)現(xiàn)PHP自帶了/(ㄒoㄒ)/~~),善用 PHP 內(nèi)置函數(shù)能極大的提高開發(fā)效率和運行效率(內(nèi)置函數(shù)都是用 C 寫的效率比用 PHP 寫的高很多),所以本文便總結(jié)了一些在常見場景中利用 PHP 內(nèi)置函數(shù)的實現(xiàn)方法。此外如果想更深入的學習有關 PHP 數(shù)組函數(shù)最好還是去查 PHP 手冊!點我看官方數(shù)組函數(shù)手冊

10年架構(gòu)師領你架構(gòu)-成長之路-

0x01 取指定鍵名

對于某些關聯(lián)數(shù)組,有時候我們只想取指定鍵名的那部分,比如數(shù)組為 ['id' => 1, 'name' => 'zane', 'password' => '123456'] 此時若只想取包含 id 和 name 的部分該怎么實現(xiàn)呢?下面直接貼代碼。

<?php$raw = ['id' => 1, 'name' => 'zane', 'password' => '123456'];// 自己用 PHP 實現(xiàn)function onlyKeys($raw, $keys) { $new = []; foreach ($raw as $key => $val) { if (in_array($key, $keys)) { $new[$key] = $val; } } return $new;}// 用 PHP 內(nèi)置函數(shù)實現(xiàn)function newOnlyKeys($array, $keys) { return array_intersect_key($array, array_flip($keys));}var_dump(onlyKeys($raw, ['id', 'name']));// 結(jié)果 ['id' => 1, 'name' => 'zane']var_dump(newOnlyKeys($raw, ['id', 'name']));// 結(jié)果 ['id' => 1, 'name' => 'zane']
很明顯簡潔很多有木有!不過 array_intersect_key 和 array_flip 是什么鬼?這里簡單的介紹一下這兩個函數(shù)的作用,首先是 array_flip 函數(shù),這個函數(shù)的功能是「將數(shù)組的鍵和值對調(diào)」,也就是鍵名變成值,值變成鍵名。我們傳遞的 $keys 參數(shù)經(jīng)過這個函數(shù)便從 [0 => 'id', 1 => 'name'] 轉(zhuǎn)變?yōu)榱?['id' => 0, 'name' => 1]。這樣做的目的是為了向 array_intersect_key 函數(shù)服務,array_intersect_key 函數(shù)的功能是「使用鍵名比較計算數(shù)組的交集」,也就是返回第一個參數(shù)數(shù)組中與其他參數(shù)數(shù)組相同鍵名的值。這樣便實現(xiàn)了取指定鍵名的功能 ~(≧▽≦)/~啦!當然要詳細了解這兩個函數(shù)的功能還是要查 PHP 官方手冊:array_flip array_intersect_key

0x02 移除指定鍵名

有了上一個例子做鋪墊,這個就簡單講講啦,道理是大同小異滴。

<?php$raw = ['id' => 1, 'name' => 'zane', 'password' => '123456'];// 用 PHP 內(nèi)置函數(shù)實現(xiàn)function removeKeys($array, $keys) { return array_diff_key($array, array_flip($keys));}// 移除 id 鍵var_dump(removeKeys($raw, ['id', 'password']));// 結(jié)果 ['name' => 'zane']
和上一個例子相比本例只是將 array_intersect_key 函數(shù)改為 array_diff_key,嗯……相信大家能猜出來這個函數(shù)的功能「使用鍵名比較計算數(shù)組的差集」,剛好和 array_intersect_key 的功能相反而已。官方手冊:array_diff_key 0x03 數(shù)組去重

這個相信大家都有這個需求,當然 PHP 也內(nèi)置了array_unique函數(shù)供給大家使用,如下例:

<?php$input = ['you are' => 666, 'i am' => 233, 'he is' => 233, 'she is' => 666];$result = array_unique($input);var_dump($result);// 結(jié)果 ['you are' => 666, 'i am' => 233]
嘿,用這個函數(shù)就能解決大部分問題了,但是有時候你可能會覺得它不夠快,原因如下: array_unique() 先將值作為字符串排序,然后對每個值只保留第一個遇到的鍵名,接著忽略所有后面的鍵名。 因為這個函數(shù)會先將數(shù)組進行排序,所以速度可能在某些場景達不到預期的要求。 現(xiàn)在我們可以祭出我們的黑科技 array_flip 函數(shù),眾所周知 PHP 里數(shù)組的鍵名是唯一的,所以在鍵名和值對調(diào)后重復的值便被忽略了。試想一下我們連續(xù)調(diào)用兩次 array_flip 函數(shù)是不是就相當于實現(xiàn)了 array_unique 函數(shù)的功能呢?示例代碼如下:

<?php$input = ['you are' => 666, 'i am' => 233, 'he is' => 233, 'she is' => 666];$result = array_flip(array_flip($input));var_dump($result);// 結(jié)果 ['she is' => 666, 'he is' => 233]
嗯哼?!結(jié)果和 array_unique 的不一樣!為什么,我們可以從 PHP 官方手冊得到答案: 如果同一個值出現(xiàn)多次,則最后一個鍵名將作為它的值,其它鍵會被丟棄。 總的來說就是 array_unique 保留第一個出現(xiàn)的鍵名,array_flip 保留最后一個出現(xiàn)的鍵名。

注意:使用 array_flip 作為數(shù)組去重時數(shù)組的值必須能夠作為鍵名(即為 string 類型或 integer 類型),否則這個值將被忽略。 此外,若不需要保留鍵名我們可以直接這樣使用 array_values(array_flip($input))。 0x04 重置索引 當我們想要對一個索引并不連續(xù)的數(shù)組進行重置時,比如數(shù)組:[0 => 233, 99 => 666],對于這種數(shù)組我們只需要調(diào)用 array_values 函數(shù)即可實現(xiàn)。如下例:

<?php$input = [0 => 233, 99 => 666];var_dump(array_values($input));// 結(jié)果 [0 => 233, 1 => 66]
需要注意的是array_values函數(shù)并不止重置數(shù)字索引還會將字符串鍵名也同樣刪除并重置。那如何在保留字符串鍵名的同時重置數(shù)字索引呢?答案就是array_slice函數(shù),代碼示例如下:

<?php$input = ['hello' => 'world', 0 => 233, 99 => 666];var_dump(array_slice($input, 0));// 結(jié)果 ['hello' => 'world', 0 => 233, 1 => 66]
array_slice函數(shù)的功能是取出數(shù)組的中的一段,但它默認會重新排序并重置數(shù)組的數(shù)字索引,所以可以利用它重置數(shù)組中的數(shù)字索引。

0x05 清除空值

嘿,有時候我們想清除某個數(shù)組中的空值比如:null、false、0、0.0、[]空數(shù)組、''空字符串、'0'字符串0 ,這時 array_filter 函數(shù)便能幫上大忙。代碼如下:

<?php$input = ['foo', false, -1, null, '', []];var_dump(array_filter($input));// 結(jié)果 [0 => 'foo', 2 => -1]
為什么會出現(xiàn)這樣的結(jié)果捏?array_filter 的作用其實是「用回調(diào)函數(shù)過濾數(shù)組中的單元」,它的第二個參數(shù)其實是個回調(diào)函數(shù),向數(shù)組的每個成員都執(zhí)行這個回調(diào)函數(shù),若回調(diào)函數(shù)的返回值為 true 便保留這個成員,為 false 則忽略。這個函數(shù)還有一個特性就是: 如果沒有提供 callback 函數(shù), 將刪除 array 中所有等值為 FALSE 的條目。 等值為 false 就是轉(zhuǎn)換為 bool 類型后值為 false 的意思,詳細看文檔:轉(zhuǎn)換為布爾類型。

注意:如果不填寫 callback 函數(shù),0、0.0、'0'字符串0 這些可能有意義的值會被刪除。所以如果清除的規(guī)則有所不同還需要自行編寫 callback 函數(shù)。

0x06 確認數(shù)組成員全部為真 有時候我們希望確認數(shù)組中的的值全部為 true,比如:['read' => true, 'write' => true, 'execute' => true],這時我們需要用一個循環(huán)判定嗎?NO,NO,NO……只需要用 array_product 函數(shù)便可以實現(xiàn)了。代碼如下:

<?php$power = ['read' => true, 'write' => true, 'execute' => true];var_dump((bool)array_product($power));// 結(jié)果 true$power = ['read' => true, 'write' => true, 'execute' => false];var_dump((bool)array_product($power));// 結(jié)果 false
為什么能實現(xiàn)這個功能呢? array_product 函數(shù)本來的功能是「計算數(shù)組中所有值的乘積」,在累乘數(shù)組中所有成員的時候會將成員的值轉(zhuǎn)為數(shù)值類型。當傳遞的參數(shù)為一個 bool 成員所組成的數(shù)組時,眾所周知 true 會被轉(zhuǎn)為 1,false 會被轉(zhuǎn)為 0。然后只要數(shù)組中出現(xiàn)一個 false 累乘的結(jié)果自然會變成 0,然后我們再將結(jié)果轉(zhuǎn)為 bool 類型不就是 false 了嘛!

注意:使用 array_product 函數(shù)將在計算過程中將數(shù)組成員轉(zhuǎn)為數(shù)值類型進行計算,所以請確保你了解數(shù)組成員轉(zhuǎn)為數(shù)值類型后的值,否則會產(chǎn)生意料之外的結(jié)果。比如:

<?php$power = ['read' => true, 'write' => true, 'execute' => 'true'];var_dump((bool)array_product($power));// 結(jié)果 false
上例是因為'true'在計算過程中被轉(zhuǎn)為 0。要想詳細了解請點擊這里。

0x07 獲取指定鍵名之前 / 之后的數(shù)組

如果我們只想要關聯(lián)數(shù)組中指定鍵名值之前的部分該怎么辦呢?又用一個循環(huán)?當然不用我們可以通過 array_keys、array_search 和 array_slice 組合使用便能夠?qū)崿F(xiàn)!下面貼代碼:

<?php$data = ['first' => 1, 'second' => 2, 'third' => 3];function beforeKey($array, $key) { $keys = array_keys($array); // $keys = [0 => 'first', 1 => 'second', 2 => 'third'] $len = array_search($key, $keys); return array_slice($array, 0, $len);}var_dump(beforeKey($data, 'first'));// 結(jié)果 []var_dump(beforeKey($data, 'second'));// 結(jié)果 ['first' => 1]var_dump(beforeKey($data, 'third'));// 結(jié)果 ['first' => 1, 'second' => 2]
思路解析,要實現(xiàn)這樣的功能大部分同學都應該能想到 array_slice 函數(shù),但這個函數(shù)取出部分數(shù)組是根據(jù)偏移量(可以理解為鍵名在數(shù)組中的順序,從 0 開始)而不是根據(jù)鍵名的,而關聯(lián)數(shù)組的鍵名卻是是字符串或者是不按順序的數(shù)字,此時要解決的問題便是「如何取到鍵名對應的偏移量?」,這是 array_keys 函數(shù)便幫了我們大忙,它的功能是「返回數(shù)組中部分的或所有的鍵名」默認返回全部鍵名,此外返回的鍵名數(shù)組是以數(shù)字索引的,也就是說返回的鍵名數(shù)組的索引就是偏移量!例子中的原數(shù)組變?yōu)椋?[0 => 'first', 1 => 'second', 2 => 'third'] 。然后我們通過 array_search 便可以獲得指定鍵名的偏移量了,因為這個函數(shù)的功能是「在數(shù)組中搜索給定的值,如果成功則返回首個相應的鍵名」。有了偏移量我們直接調(diào)用 array_slice 函數(shù)便可以實現(xiàn)目的了。 上面的例子懂了,那獲取指定鍵名之后的數(shù)組也就輕而易舉了,略微修改 array_slice 即可。直接貼代碼:

<?php$data = ['first' => 1, 'second' => 2, 'third' => 3];function afterKey($array, $key) { $keys = array_keys($array); $offset = array_search($key, $keys); return array_slice($array, $offset + 1);}var_dump(afterKey($data, 'first'));// 結(jié)果 ['second' => 2, 'third' => 3]var_dump(afterKey($data, 'second'));// 結(jié)果 ['third' => 3]var_dump(afterKey($data, 'third'));// 結(jié)果 []
那如何獲取指定值之前或之后的數(shù)組呢?嘿,記得 array_search 的作用吧,其實我們只需要這樣調(diào)用 beforeKey($data, array_search($value, $data)) 不就實現(xiàn)了嘛! 0x08 數(shù)組中重復次數(shù)最多的值 敲黑板,劃重點!據(jù)說這是一道面試題喔。假設有這樣一個數(shù)組 [6, 11, 11, 2, 4, 4, 11, 6, 7, 4, 2, 11, 8],請問如何獲取數(shù)組中重復次數(shù)最多的值?關鍵就在于 array_count_values 函數(shù)。實例代碼如下:

<?php$data = [6, 11, 11, 2, 4, 4, 11, 6, 7, 4, 2, 11, 8];$cv = array_count_values($data);// $cv = [6 => 2, 11 => 4, 2 => 2, 4 => 3, 7 => 1, 8 => 1]arsort($cv);$max = key($cv);var_dump($max);// 結(jié)果 11
array_count_values 函數(shù)的功能是「統(tǒng)計數(shù)組中所有的值」,就是將原數(shù)組中的值作為返回數(shù)組的鍵名,值出現(xiàn)的次數(shù)作為返回數(shù)組的值。這樣我們便可以通過 arsort 函數(shù)對出現(xiàn)的次數(shù)進行降序排序并且保持索引關聯(lián)。最后使用 key 獲得當前單元(當前單元默認為數(shù)組第一個成員)的鍵名,此時的鍵名即是原數(shù)組的值重復次數(shù)最多的值。






查看完整回答
反對 回復 2022-04-19
  • 2 回答
  • 0 關注
  • 292 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號