我有一个如下所示的数组:
Id = "ADA001"
Stock: 15
该阵列有大约1700个看起来相同的记录,我如何在数组中搜索ID 1并返回股票?
修改:我需要访问这17000条记录中每条记录的库存
编辑:我从Daniel Centore那里得到了一些帮助,他告诉我设置一个数组主键到项目的ID,它等于股票,但我可以&# 39;让它发挥作用。
我目前从MySQL数据库获取数据并将其存储在数组中,如下所示:
$data[] = array();
$getdisposabletest = mysqli_query($connect, "Select id, disposable FROM products");
while ($z = mysqli_fetch_array($getdisposabletest)) {
$data = $z;
}
现在,当我使用看起来像这样的Daniels代码时:
$myMap = [];
foreach($data as $item) {
$myMap[$item['id']] = $item['disposable'];
}
当我尝试用ID" ADA001"
回复我的产品时,它不会返回任何内容 echo $myMap["ADA001"];
当我做" count($ mymap)"它说它的2个记录很大,它应该比那个大吗?
感谢您的帮助
答案 0 :(得分:3)
我会使用array_filter。返回比较器的结果。
$results = array_filter($targetArray, function($el) {
return $el === 1;
});
答案 1 :(得分:1)
修改:现在已经明确表示OP想要查询数千个项目,正确的方法是将Id
作为地图的关键在PHP中,像这样:
$myMap = [];
foreach($array as $item) {
$myMap[$item['Id']] = $item['Stock'];
}
现在,只要您想访问项目' 12',只需使用$myMap['12']
。
这更快的原因是因为算法的复杂性。您应该阅读有关Big-O表示法的更多信息。本质上,这里的第一个操作是n
的顺序,然后循环遍历的每个项目都是n*log(n)
的顺序,所以最终的结果是{{1}的顺序如果没有更多信息,这是你能做的最好的事情。但是,如果你只是访问一个元素,那么只通过MySQL访问那个元素会更好,因为它会大约n*log(n)
,这样会更快。
编辑2:另请注意,如果您要访问多个字段(即而不仅仅是股票),您可以执行以下操作:
log(n)
只需访问第12项的股票:$myMap = [];
foreach($array as $item) {
$myMap[$item['Id']] = $item;
}
或其名称如下:$myMap['12']['stock']
。
答案 2 :(得分:0)
你会做这样的事情。
$newArray=[];
foreach($array as $item){
if($item['Id'] === 1){
$newArray[] = $item;
}
}
$stockArray = array_column($newArray,'Stock');