出于某种原因,我有一个排序的php数组:
"$arr_questions" = Array [6]
0 Array [6]
1 Array [6]
2 Array [6]
3 Array [6]
4 Array [6]
5 Array [6]
每个位置都是另一个阵列。这次它是联想的。见位置[0]:
0 = Array [6]
question_id 40
question La tercera pregunta del mundo
explanation
choices Array [3]
correct 0
answer 1
没有循环我的数组,有没有办法直接访问这个位置0,只知道它的一个属性?
示例...想象一下,我必须更改“question_id”属性为40的数组位置的某些属性。这是我所知道的唯一属性。我不知道question_id属性是在第一个还是第二个或哪个位置。并且,例如,想象一下我想将“回答”属性更改为2。
如何在不循环整个数组的情况下直接访问该位置。我的意思是......我不想这样做:
foreach ($arr_questions as $question){
if ($question["question_id"] == 40){
$question["answer"] == 2;
}
}
答案 0 :(得分:1)
PHP Array允许您通过其ID访问随机值。
实际上这是一个大问题,因为在其他语言中,数组索引必须始终是整数。 但是,PHP数组的工作方式大致类似于其他语言字典,其中键可以是其他数据类型,如字符串。
通过这个,如果你想能够访问某个问题,并且你知道ID,那么你应该通过让你的question_id成为每个数组条目的索引来构造数组。
如果你不能那样做,不要惊慌。 最后你必须进行某种搜索,这是真的。 但是,嘿,那么你有两个案例:
作为旁注,你不能映射东西,避免浪费一些CPU时间或一些RAM空间,通常你可以互换一个。 我的意思是,如果你只存储一个由question_id索引的数组,那么你可以在O(1)+ O(数组访问)时间内查找question_id。如果O(数组访问)是常量,那么你可以在O(1)中找到东西。这意味着时间不变,而且速度可以达到最快。
但是,如果您需要其他类型的搜索,最终可能会出现O(n * log(n))或O(n²)时间复杂度。
但是,如果你已经存储了多个数组作为订购它们的方法,那么你只需要O(1)时间来访问它们。 但是,你需要O(n)空间(这里的n是可直接访问的特征数量)。
这将增加构建数组的时间(通过常量)。
答案 1 :(得分:0)
不,没有循环遍历数组就无法访问该元素。但是,您可以将该搜索抽象为辅助函数。
答案 2 :(得分:0)
根据您的情况,没有循环就不可能,但如果您将阵列结构更改为:
array(
39 => array(...),
40 => array(...)
)
你的question_id
中有39和40,那么你可以快速访问它们而不需要任何循环。
如果您想要或必须保留该结构,那么只需编写一个函数来获取array
,associative index
和value
作为参数来搜索数组和返回找到的索引,所以你不会被迫反复写这个循环......