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

时间:2016-04-13 14:10:01

标签: php mysql arrays

我有一个如下所示的数组:

    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个记录很大,它应该比那个大吗?

感谢您的帮助

3 个答案:

答案 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');