[英]Get specific array value where another value is “1”?
我有一个看起来像这样的数组:
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;
}
现在当我使用看起来像这样的Daniels代码时:
$myMap = [];
foreach($data as $item) {
$myMap[$item['id']] = $item['disposable'];
}
当我尝试使用ID“ADA001”回显我的产品时,它不会返回任何内容
echo $myMap["ADA001"];
此外,当我“计算($ 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');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.