繁体   English   中英

获取特定数组值,其他值为“1”?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM