Async foreach loop
Merhaba, API tarafında aşağıda bulunan parça ile ürün durumu kontrol ediyorum.Ancak ürün listelemesi artınca bu işlemde hayli geç cevap döndürmekte.Senkronizasyon olarak ilk işlem bitmeden istek gönderemiyorum apiye. Bu konuda yardımınıza ihtiyacım var. Teşekkürler ..
$productList = array();
$productIdList = array();
$menuList = $getir->menuList();
foreach ($menuList["response"] as $keys) {
foreach ($keys["menuSubCategories"] as $product) {
foreach ($product["menuProducts"] as $val) {
if ($val["status"] == 200 || $val["status"] == "200") {
array_push($productList, $val);
}
}
}
}
foreach ($productList as $keys) {
$array = [
"id" => $keys["id"],
"status" => $keys["status"],
"price" => $keys["price"]
];
array_push($productIdList, $array);
}
$productRowCount = false;
foreach ($productIdList as $prod) {
if ($prod["price"] == $Description["price"]) {
$pro = $getir->getMenuProduct($prod["id"]);
foreach ($pro["response"]["barcodes"] as $productBarcode) {
if ($productBarcode == $barcode) {
$productRowCount = true;
if ($Json["status"] == "true") {
$status = 100;
$statusMessage = "Ürün başarıyla satışa açıldı!";
} else {
$status = 200;
$statusMessage = "Ürün başarıyla satışa kapatıldı!";
}
$array =
[
'status' => $status
];
}
}
}
}
if ($productRowCount == false) {
$JSON = [
"status" => "warning",
"message" => "Ürün onay bekliyor!"
];
}
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
array_push($productList, $val);
yukarıdaki kullanımı aşağıdakiyle değiştirmeni tavsiye ederim.
$productList[] = $val;
$productList zaten boş bir array, push kullanarak ekstradan method döndürüyorsun hemde dizi boyunca, gerek yok. bu kullanım aynı sonucu daha az performans harcayarak verir. en azından ben öyle düşünüyorum. ayrıca tekrar dönüp kodlara bakınca, ikinci döngüde ilk aldığın döngüden yeni bir döngü türetip değer atadığını gördüm. verimsiz bir kullanım. bunu iyice düşünüp ilk döngüde hallet. ikinci döngüyü sil ve yukarıdaki verdiğim örnek ile ilk döngüde atama yap, indis sayıları zaten eşit. muhtemelen ikinci döngüyü ortadan kaldırıp aynı sonucu ilk döngüde hallettiğinde, diğerleri içinde iyileştirmeler yapabilecek yeni bir bakış açısı edinebilirsin..
$productList[] = $val;
$productIdList[] = [
"id" => $val["id"],
"status" => $val["status"],
"price" => $val["price"]
];
nereden ne değer geliyor benim için belli değil ama, ikinci döngüyü ilk döngüden türettiğin için bunun çalışması gerektiğini sanıyorum.
bu ilk iki döngüden sonraki döngüler içerisinde ise çok fazla koşul ve iç içe döngü mevcut. eğer mümkünse koşula uymayan dizileri döngüye sokmadan önce çıkart ve koşul yazmaktan kurtul.
tam sınıf yazacaktım, ama dosyada önceden tanımlanmış ve nereden geldiği belli olmayan bazı değişkenler vardı bende kaba taslak aklımdakini örnekledim. print_r ile bi çıktı alsaydın muhtemelen tam çalışır birde örnek verebilirdim, birde $Json gibi dosyada belirtilmemiş değişkenlerin nereden geldiği net olsaydı.
class getir {
public function MainArr($val){
$productList = array();
$productIdList = array();
/*
burada üç tane iç içe döngü var normalde print_r ile çıktı versen ona göre döngü oluşturabilirdim, döngüyü sen oluşturursun artık
*/
foreach($val as $v){
$productList[] = $val;
$productIdList[] = [
"id" => $val["id"],
"status" => $val["status"],
"price" => $val["price"]
];
}
return array ('list' => $productList, "id" => $productIdList);
}
public function Check($val){
/* buraya son döngüde gerçekleşen koşullar için bir desen oluştur
bu tek koşulu gerektiği kadar çoğalt
*/
return $val["status"] == "true" ? 100 : 200;
}
public function RetrunStat(){
foreach($this->MainArr($value)["id"] as $val){
$val = $this->Check($degisken);
}
}
}
@munzevi yanıtın için teşekkür ederim.En azından bir rahatlama gerçekleşti request kısmında. Getir entegrasyonu yapıyorum ancak o kadar saçma bir bodyleri var ki anlatamam.Menüye ürün gönderdiğinde menü tarafında farklı id onay aldıktan sonra farklı id veriliyor.Menü tarafında ürünün barkodu verilmiyor sadece id gönderilmekte o kadar saçma ki yani :) Eşleşme sağlamak içinde menüde bulununan tüm idlere istek gönderiyorum hangisinden gelen barkod eşleşme sağlıyorsa onun id değerini kayıt ediyorum tüm sistem bu.Menüde ürünün barkodunu sağlasa hiç bu kadar gereksiz postlara gerek kalmıyacak ama işte. Tekrar teşekkür ediyorum