java-php有什么数据结构可以实现双向索引查询?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-php有什么数据结构可以实现双向索引查询?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2222字,纯文字阅读大概需要4分钟。
内容图文
我也不知道该怎么表达,总之需求有点类似于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
内容总结
以上是互联网集市为您收集整理的java-php有什么数据结构可以实现双向索引查询?全部内容,希望文章能够帮你解决java-php有什么数据结构可以实现双向索引查询?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。