PHP:不在 foreach 内循环

我有这个数组:


$flavours = array (

    0 => array(799390 => 'Banana',),

    1 => array(799391 => 'Chocolate',)

);

现在我在 foreach 中循环数据库中的一组。我从数据库中获取“Banana”,我需要数组来给我799390。


我努力了:


‌‌array_search('Banana', $flavours); 

但它不起作用,除非我添加:


‌‌array_search('Banana', $flavours[0]); 

但我无法添加,[0]因为我无法判断“香蕉”口味在数组中的哪个位置。


除了在 foreach 内再次循环之外还有什么解决方案吗?



慕村9548890
浏览 267回答 3
3回答

四季花海

首先,我们可以使用array_walk_recursive()扁平化数组,这只会消除嵌套数组。接下来,我们用于array_flip()交换展平数组中的键/值。这样可以更轻松地获取特定术语的 ID。<?php$flavours = [&nbsp; &nbsp; [799390 => 'Banana'],&nbsp; &nbsp; [799391 => 'Chocolate']];//flatten array//Produces: Array ( [799390] => Banana [799391] => Chocolate )array_walk_recursive($flavours,&nbsp; &nbsp; function($v, $k) use (&$temp) {&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; $temp[$k] = $v;&nbsp;&nbsp; &nbsp; });//flip array. Swaps keys with values.//Produces: Array ( [Banana] => 799390 [Chocolate] => 799391 )$flavours = array_flip($temp);现在你可以很容易地获得ID,例如$flavours['Banana']。如果您有一个非常大的数组,此方法可能会变得很慢。然而,我在廉价的网络主机上用 100,000 个值对此进行了测试,并运行了该方法几次(20-25 次)。它始终以大约(通常低于)0.1 毫秒(即大约 0.0014 秒)完成。

浮云间

您可以插入一条if语句来设置循环条件:foreach ($flavours as $key => $value) {&nbsp; if($key =&nbsp; array_search('Banana', $value)){&nbsp; &nbsp;echo $key;&nbsp;&nbsp;}}输出799390

杨__羊羊

如果正在搜索的单词大小写不同,则在尝试查找匹配项时,许多常用的数组方法将不起作用,但是使用“preg_grep然而”将允许以不区分大小写的方式查找匹配项。function findflavour( $search, $haystack ){&nbsp; &nbsp; foreach( $haystack as $index => $arr ){&nbsp; &nbsp; &nbsp; &nbsp; $res=preg_grep( sprintf( '@%s@i', $search ), $arr );&nbsp; &nbsp; &nbsp; &nbsp; if( !empty( $res ) ) return array_search( array_values( $res )[0], $arr );&nbsp; &nbsp; }&nbsp; &nbsp; return false;}$search='BaNanA';$flavours=array(&nbsp; &nbsp; array( 799390 => 'Banana' ),&nbsp; &nbsp; array( 799391 => 'Chocolate' ),&nbsp; &nbsp; array( 729361 => 'Chilli' ),&nbsp; &nbsp; array( 879695 => 'Apple' ),&nbsp; &nbsp; array( 995323 => 'Avacado' ),&nbsp; &nbsp; array( 528362 => 'Orange' ),&nbsp; &nbsp; array( 723371 => 'Cherry' ),);printf( 'Key:%s', findflavour( $search, $flavours ) );如果源数组中可能存在多个具有相同值但 ID 不同的元素,则该findflavour函数的版本略有不同function findflavour( $search, $haystack, $multiple=false ){&nbsp; &nbsp; $keys=[];&nbsp; &nbsp; foreach( $haystack as $index => $arr ){&nbsp; &nbsp; &nbsp; &nbsp; $res=preg_grep( sprintf( '@%s@i', $search ), $arr );&nbsp; &nbsp; &nbsp; &nbsp; if( !empty( $res ) ) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $key=array_search( array_values( $res )[0], $arr );&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( $multiple )$keys[]=$key;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else return $key;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return $multiple ? $keys : false;}$multiple=true;$search='AVacAdo';$flavours=array(&nbsp; &nbsp; array( 799390 => 'Banana' ),&nbsp; &nbsp; array( 799391 => 'Chocolate' ),&nbsp; &nbsp; array( 291333 => 'Avacado' ),&nbsp; &nbsp; array( 729361 => 'Chilli' ),&nbsp; &nbsp; array( 879695 => 'Apple' ),&nbsp; &nbsp; array( 995323 => 'Avacado' ),&nbsp; &nbsp; array( 528362 => 'Orange' ),&nbsp; &nbsp; array( 723371 => 'Cherry' ),);printf( 'Key(s): %s', print_r( findflavour( $search, $flavours, $multiple ), true ) );
打开App,查看更多内容
随时随地看视频慕课网APP