簡體   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