Maison > développement back-end > tutoriel php > java - php有什么数据结构可以实现双向索引查询?

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

WBOY
Libérer: 2016-08-10 09:07:16
original
1262 Les gens l'ont consulté

我也不知道该怎么表达,总之需求有点类似于C#里面的linq,
假如有如下数组

<code>$test = [
    'a'=>'a1',
    'b'=>'a1',
    'c'=>'c1',
]
</code>
Copier après la connexion
Copier après la connexion

我现在可以通过$test['a']查询到'a1',但是我也想通过'a1'来反查到'a'和'b'两个元素,请问如何在php中实现这个?

补充:有人说用foreach实现,但是我这个数组到后期有可能非常大,甚至大到几千上万,用foreach肯定效率不高。

已有的解决方案只能解决每个数组元素键值不一样的情况,也就是一对一映射的情况,1是array_search,2是先array_flip再用传统的$test['a1']查找。

回复内容:

我也不知道该怎么表达,总之需求有点类似于C#里面的linq,
假如有如下数组

<code>$test = [
    'a'=>'a1',
    'b'=>'a1',
    'c'=>'c1',
]
</code>
Copier après la connexion
Copier après la connexion

我现在可以通过$test['a']查询到'a1',但是我也想通过'a1'来反查到'a'和'b'两个元素,请问如何在php中实现这个?

补充:有人说用foreach实现,但是我这个数组到后期有可能非常大,甚至大到几千上万,用foreach肯定效率不高。

已有的解决方案只能解决每个数组元素键值不一样的情况,也就是一对一映射的情况,1是array_search,2是先array_flip再用传统的$test['a1']查找。

手册中的array_search可以解决你的需求。

<code class="php"><?php $array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array);   // $key = 1;
?> </code>
Copier après la connexion

在群里面请教大神解决了,array_keys就好了。

<code><?php $a=array("a"=>"Dog","b"=>"Dog","c"=>5,"d"=>"5");
print_r(array_keys($a,"Dog"));
//Array ( [0] => a [1] => b )
 ?>
 </code>
Copier après la connexion

直接上代码吧!~

没啥好办法,两个数组来搞吧

谢谢邀请, 因为数组结构的key肯定是唯一的, 但可能不同的key对应相同的值, 所以我所知道的, 要想实现c#linq, 需要保证数组的值唯一,

<code class="php">$test = [
    'a' => 'a1',
    'b' => 'b1',
    'c' => 'c1',
    'd' => 'd1',
    'e' => 'd1'
];

//去除重复的值
$test = array_unique($test);</code>
Copier après la connexion

去除重复值后, 使数组反转,

<code class="php">$test = [
    'a' => 'a1',
    'b' => 'b1',
    'c' => 'c1',
    'd' => 'd1',
    'e' => 'd1'
];

$test = array_unique($test);

$wocao = array_flip($test);
var_dump($wocao);
</code>
Copier après la connexion

反转结构把原数组的key当做值, 原数组的value 作为key, 如下

<code>array(4) {
  ["a1"]=> string(1) "a"
  ["b1"]=> string(1) "b"
  ["c1"]=> string(1) "c"
  ["d1"]=> string(1) "d"
}</code>
Copier après la connexion

现在, 可以实现类似c#的linq功能了

<code>$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</code>
Copier après la connexion

不足之处请多指出,,,

不就是根据值查询键么,一个 array_keys 就能解决了呀:

<code>$arr = array('a' => 'a1', 'b' => 'a1', 'c' => 'c1');
var_export( array_keys($arr, 'a1') ); //输出键名 a 和 b</code>
Copier après la connexion
Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal