3 回答

TA貢獻1811條經(jīng)驗 獲得超5個贊
首先,我們可以使用array_walk_recursive()扁平化數(shù)組,這只會消除嵌套數(shù)組。
接下來,我們用于array_flip()交換展平數(shù)組中的鍵/值。這樣可以更輕松地獲取特定術(shù)語的 ID。
<?php
$flavours = [
[799390 => 'Banana'],
[799391 => 'Chocolate']
];
//flatten array
//Produces: Array ( [799390] => Banana [799391] => Chocolate )
array_walk_recursive($flavours,
function($v, $k) use (&$temp) {
$temp[$k] = $v;
}
);
//flip array. Swaps keys with values.
//Produces: Array ( [Banana] => 799390 [Chocolate] => 799391 )
$flavours = array_flip($temp);
現(xiàn)在你可以很容易地獲得ID,例如$flavours['Banana']。
如果您有一個非常大的數(shù)組,此方法可能會變得很慢。然而,我在廉價的網(wǎng)絡(luò)主機上用 100,000 個值對此進行了測試,并運行了該方法幾次(20-25 次)。它始終以大約(通常低于)0.1 毫秒(即大約 0.0014 秒)完成。

TA貢獻1829條經(jīng)驗 獲得超4個贊
您可以插入一條if語句來設(shè)置循環(huán)條件:
foreach ($flavours as $key => $value) {
if($key = array_search('Banana', $value)){
echo $key;
}
}
輸出
799390

TA貢獻1943條經(jīng)驗 獲得超7個贊
如果正在搜索的單詞大小寫不同,則在嘗試查找匹配項時,許多常用的數(shù)組方法將不起作用,但是使用“preg_grep然而”將允許以不區(qū)分大小寫的方式查找匹配項。
function findflavour( $search, $haystack ){
foreach( $haystack as $index => $arr ){
$res=preg_grep( sprintf( '@%s@i', $search ), $arr );
if( !empty( $res ) ) return array_search( array_values( $res )[0], $arr );
}
return false;
}
$search='BaNanA';
$flavours=array(
array( 799390 => 'Banana' ),
array( 799391 => 'Chocolate' ),
array( 729361 => 'Chilli' ),
array( 879695 => 'Apple' ),
array( 995323 => 'Avacado' ),
array( 528362 => 'Orange' ),
array( 723371 => 'Cherry' ),
);
printf( 'Key:%s', findflavour( $search, $flavours ) );
如果源數(shù)組中可能存在多個具有相同值但 ID 不同的元素,則該findflavour函數(shù)的版本略有不同
function findflavour( $search, $haystack, $multiple=false ){
$keys=[];
foreach( $haystack as $index => $arr ){
$res=preg_grep( sprintf( '@%s@i', $search ), $arr );
if( !empty( $res ) ) {
$key=array_search( array_values( $res )[0], $arr );
if( $multiple )$keys[]=$key;
else return $key;
}
}
return $multiple ? $keys : false;
}
$multiple=true;
$search='AVacAdo';
$flavours=array(
array( 799390 => 'Banana' ),
array( 799391 => 'Chocolate' ),
array( 291333 => 'Avacado' ),
array( 729361 => 'Chilli' ),
array( 879695 => 'Apple' ),
array( 995323 => 'Avacado' ),
array( 528362 => 'Orange' ),
array( 723371 => 'Cherry' ),
);
printf( 'Key(s): %s', print_r( findflavour( $search, $flavours, $multiple ), true ) );
- 3 回答
- 0 關(guān)注
- 200 瀏覽
添加回答
舉報