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