获取特定的数组值,其中另一个值为“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;
}

现在,当我使用看起来像这样的丹尼尔斯代码时:

    $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');