可能重复:
确定PHP中是否存在数组键有哪些更快更好?
假设我想存储我在memcache上的朋友列表.有时我需要搜索用户是否在我的列表中,有时我需要获取所有朋友列表.
你会宁愿
$friends[] = $friend
Run Code Online (Sandbox Code Playgroud)
要么
$friends[$friend] = 1;
Run Code Online (Sandbox Code Playgroud)
理由是在没有惩罚速度的情况下尽可能地保存公羊.我没有找到任何关于php 5.3.8的案例研究可以帮助我解决我的小困境:在负载下,执行速度更快?
array_key_exists还是in_array?(即:foo是酒吧的朋友?)
此外,有时我需要获取整个朋友列表,所以我需要迭代整个列表,以建立一个朋友阵列.根本不确定第二种方法,因为我还不知道是否会有更多的array_search | array_key_exists | in_array或fetch of full friends list.
任何的想法?
将新值推送到索引数组时
$array[] = 'new value';
Run Code Online (Sandbox Code Playgroud)
PHP文档解释了如何在[MAX_INDEX + 1]位置添加它.
将新值推送到关联数组时
$array['key'] = 'new value';
Run Code Online (Sandbox Code Playgroud)
它的工作方式相同,但我没有在文档中看到任何解释来确认它是如何或为什么这样做的.订单似乎在我的实施中是一致的,但我怎么知道订单将保持不变?有谁知道PHP如何在后端实现这一点?
在查看一些代码并尝试修复某些问题时,我提出了一个问题.为什么PHP数组键区分大小写?拥有它似乎是有益的
$array = array(
"Key"=>"Value",
"key"=>"Value",
)
Run Code Online (Sandbox Code Playgroud)
是同一把钥匙.有人可以向我解释将这两个键分开的好处吗?
我正在寻找一种简单的方法来获取一个新元素的数组的下一个数字索引,该元素也可以由PHP选择.
例1:
$array = array();
$array[] = 'new index';
Run Code Online (Sandbox Code Playgroud)
对于这种情况,这将是0.
例1a:
$array = array(100 => 'prefill 1');
unset($x[100]);
$x[] = 'new index';
Run Code Online (Sandbox Code Playgroud)
对于这种情况,这将是101.
例2:
$array = array(-2 => 'prefill 1' );
$array[] = 'new index';
Run Code Online (Sandbox Code Playgroud)
对于这种情况,这将再次为0.
例3:
$array = array(-2 => 'prefill 1', 1 => 'prefill 2' );
$array[] = 'new index';
Run Code Online (Sandbox Code Playgroud)
对于这种情况,这将是2.
我现在想知道PHP将为数组中的新元素选择的下一个数字键,但是如果可能的话,不会迭代所有数组值.
我需要这个通过SPL自己的数组实现,如果添加了一个新的元素而不指定偏移量,它应该模仿PHP的默认行为.
例4:
$array = array(-2 => 'prefill 1', 'str-key-1' => 'prefill 2', 1 => 'prefill 3' , 'str-key-2' => 'prefill 4');
$array[] = 'new index';
Run Code Online (Sandbox Code Playgroud)
对于这种情况,这将再次为2. …
我无法理解以下内容,我希望有人可以为我阐明一下:
在C++中,如果我创建一个包含2M不同文本位(testdata)的测试数据向量,则使用这些字符串作为索引值创建一个映射,然后查找所有值,如下所示:
//Create test data
for(int f=0; f<loopvalue; f++)
{
stringstream convertToString;
convertToString << f;
string strf = convertToString.str();
testdata[f] = "test" + strf;
}
time_t startTimeSeconds = time(NULL);
for(int f=0; f<2000000; f++) testmap[ testdata[f] ] = f; //Write to map
for(int f=0; f<2000000; f++) result = testmap[ testdata[f] ]; //Lookup
time_t endTimeSeconds = time(NULL);
cout << "Time taken " << endTimeSeconds - startTimeSeconds << "seconds." << endl;
Run Code Online (Sandbox Code Playgroud)
这需要10秒钟.
如果我在PHP中看起来至少相同:
<?php
$starttime = time();
$loopvalue = 2000000;
//fill array
for($f=0; …Run Code Online (Sandbox Code Playgroud) 目前我在使用array_replace时使用foreach搜索键:
$grades = array(
0 =>array('id'=>1, 'grade'=>4),
1 =>array('id'=>5, 'grade'=>2),
2 =>array('id'=>17,'grade'=>1),
)
$replacement = array('id'=>17,'grade'=>3);
foreach($grades as $key=>$grade){
if($grade->id ==$replacement['id'] )
$found = $key;
}
$new_grades = array_replace($grades, array($found_key=>$replacement));
Run Code Online (Sandbox Code Playgroud)
我想知道当$ grades数组中的元素数量增长时,这是否会变得效率低下.有没有更好的方法来搜索和替换工作?