在PHP中将列表(数组)转换为关联数组
我想转换PHP列表(数组),即 进入具有真实值的关联数组(只是为了能够快速测试键的存在/不存在),例如:在PHP中将列表(数组)转换为关联数组,php,arrays,associative-array,Php,Arrays,Associative Array,我想转换PHP列表(数组),即 进入具有真实值的关联数组(只是为了能够快速测试键的存在/不存在),例如: array( "start" => 1, "end" => 1, "coords" => 1 ) 还有比这更优雅的方法吗 array_fill_keys($ar, 1) 有一个名为array\u flip的函数可以执行此操作 对我来说,在数组上执行array\u flip,然后使用isset比在数组中执行要快得多 但是请注意,这只在您要多次搜索
array(
"start" => 1,
"end" => 1,
"coords" => 1
)
还有比这更优雅的方法吗
array_fill_keys($ar, 1)
有一个名为
array\u flip
的函数可以执行此操作
对我来说,在数组上执行array\u flip
,然后使用isset
比在数组中执行要快得多
但是请注意,这只在您要多次搜索数组时才有用。可能没有比数组填充键($ar,1)更优雅的解决方案了。
还有什么比调用一个内置函数更优雅的呢?@Felix我知道这听起来很奇怪,但我发现这种方法相当笨拙……如果让您感觉更好,您可以迭代数组;)PHP没有集合,因此这是您可以做到的最好的方法。当然,您可以创建自己的函数:functionsetify($array){returnarray\u fill_keys($ar,true)}
或者类似的东西。或者你会期望什么?有没有像数组填充键这样的函数?@sandeep:\u array
中的无论如何都很慢(与isset
相比),因为它必须进行线性搜索<代码>数组翻转
是一种可能性,但请注意,第一个条目的值为0
,因此不会计算为true
(例如if($arr[firstEntry])
)。当然,无论如何都应该使用isset
,因此实际值并不重要(只要它们不是null
)。@Tomas:你还怎么测试元素的存在?只需执行if($arr[value])
就会给您一个通知:
如果密钥不在数组中。是的,在数组中
很慢。但是,如果我使用此方法检查数组中是否存在值,则它必须以任何方式处理数组中的每个项。我确信散列字符串并使其成为数组键的时间比它是否等于$needle
所花费的时间要长。此外,此方法占用更多内存-但如果您检查是否有大量字符串,这将非常有用。@Thomas,然后只需说$result[$originalArray[0]]=1
,现在您可以确信每个关键点都指向一个计算结果为true
的值。
array_fill_keys($ar, 1)