您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

java - php有什么数据结构可以实现双向索引查询?

2024/3/16 17:46:56发布20次查看
我也不知道该怎么表达,总之需求有点类似于c#里面的linq,
假如有如下数组
$test = [ 'a'=>'a1', 'b'=>'a1', 'c'=>'c1',]

我现在可以通过$test['a']查询到'a1',但是我也想通过'a1'来反查到'a'和'b'两个元素,请问如何在php中实现这个?
补充:有人说用foreach实现,但是我这个数组到后期有可能非常大,甚至大到几千上万,用foreach肯定效率不高。
已有的解决方案只能解决每个数组元素键值不一样的情况,也就是一对一映射的情况,1是array_search,2是先array_flip再用传统的$test['a1']查找。
回复内容: 我也不知道该怎么表达,总之需求有点类似于c#里面的linq,
假如有如下数组
$test = [ 'a'=>'a1', 'b'=>'a1', 'c'=>'c1',]

我现在可以通过$test['a']查询到'a1',但是我也想通过'a1'来反查到'a'和'b'两个元素,请问如何在php中实现这个?
补充:有人说用foreach实现,但是我这个数组到后期有可能非常大,甚至大到几千上万,用foreach肯定效率不高。
已有的解决方案只能解决每个数组元素键值不一样的情况,也就是一对一映射的情况,1是array_search,2是先array_flip再用传统的$test['a1']查找。
手册中的array_search可以解决你的需求。
'blue', 1 => 'red', 2 => 'green', 3 => 'red');$key = array_search('green', $array); // $key = 2;$key = array_search('red', $array); // $key = 1;?>
在群里面请教大神解决了,array_keys就好了。
dog,b=>dog,c=>5,d=>5);print_r(array_keys($a,dog));//array ( [0] => a [1] => b ) ?>
直接上代码吧!~
没啥好办法,两个数组来搞吧
谢谢邀请, 因为数组结构的key肯定是唯一的, 但可能不同的key对应相同的值, 所以我所知道的, 要想实现c#的linq, 需要保证数组的值唯一,
$test = [ 'a' => 'a1', 'b' => 'b1', 'c' => 'c1', 'd' => 'd1', 'e' => 'd1'];//去除重复的值$test = array_unique($test);
去除重复值后, 使数组反转,
$test = [ 'a' => 'a1', 'b' => 'b1', 'c' => 'c1', 'd' => 'd1', 'e' => 'd1'];$test = array_unique($test);$wocao = array_flip($test);var_dump($wocao);
反转结构把原数组的key当做值, 原数组的value 作为key, 如下
array(4) { [a1]=> string(1) a [b1]=> string(1) b [c1]=> string(1) c [d1]=> string(1) d}
现在, 可以实现类似c#的linq功能了
$test = [ 'a' => 'a1', 'b' => 'b1', 'c' => 'c1', 'd' => 'd1', 'e' => 'd1'];$test = array_unique($test);$wocao = array_flip($test);$test['a']; //a1$wocao['a1']; //a
不足之处请多指出,,,
不就是根据值查询键么,一个 array_keys 就能解决了呀:
$arr = array('a' => 'a1', 'b' => 'a1', 'c' => 'c1');var_export( array_keys($arr, 'a1') ); //输出键名 a 和 b
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product