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