Performans İyileştirme: array_flip fonksiyonu için alternatif

2 Cevap php

Ben performansını optimize etmek array_flip kullanarak önleyebilirsiniz herhangi bir yolu var mı. Ben sorgu hazırlanması ve yürütülmesi ve $resultCollection bir ilişkisel dizi olarak veri depolama, veritabanı bir select deyimi yapıyor ve ben dizi var daha op ve için am $resultCollection kodundan op[] olarak belirgin olan outputId saklama am her öğe.

Ben kod açıklanmış ve bu yüzden benim soru performansını artırmak için istediğiniz gibi nasıl array_flip kullanarak array_flip için benzer alternatif elde edebilirsiniz.

$resultCollection = $statement->fetchAll(PDO::FETCH_ASSOC);

$op = array();

//Looping through result collection and storing unicaOfferId into op array. 
foreach ($resultCollection as $output)
{
$op[] = $output['outputId'];
}

//Here op array has key as 0, 1, 2...and value as id {which I am interested in}

//Flip op array to get offer ids as key

$op = array_flip($op);

//Doing a flip to get id as key. 

foreach ($ft as $Id => $Off)
{
    $ft[$Id]['is_set'] = isset($op[$Id]);
}

2 Cevap

Sen indeksler için foreach gelen tuşunu kullanın ve dizi böyle önceden çevrilmiş inşa etmek gerekir.

    foreach ($resultCollection as $key => $output) {
        $op[ $output['outputId'] ] = $key;
    }

Eğer değer umurumda gibi Eh, o görünmüyor, çünkü bur yerine sadece O (1) tuşları arama hızı, ben ilk defa bu şekilde $op kurmak istiyorum

foreach ($resultCollection as $output)
{
  $op[$output['outputId']] = null;
}

Or you can look into in_array(), ben hızı karşılaştırır nasıl bilmiyorum. (bu 0 (n) gibi görünüyor, bu yüzden daha hızlı)

EDIT

Eğer were sonra elde ne etrafında ilk defa yaratmak isteseydim array_flip(), bu şekilde yapmak.

$i = 0;
foreach ($resultCollection as $output)
{
  $op[$output['outputId']] = $i++;
}

Ben gerçekten ne sonra konum "olsun" Ama eğer yorumlarınızın sonra, ben hâlâ emin değilim.