Diziden değerin sadece ilk görüldüğü almak için herhangi bir dizi işlevi veya kullanıcı tanımlı işlev?

2 Cevap php

EDITED

Ben katılmak sol ile bu seçme sorgusu kullanıyorum:

$updaterbk = "SELECT j1. *
FROM jos_audittrail j1
LEFT OUTER JOIN jos_audittrail j2 ON ( j1.trackid != j2.trackid
AND j1.field != j2.field
AND j1.changedone < j2.changedone )
WHERE j1.operation = 'UPDATE'
AND j2.id IS NULL
";

hangi bana bir dizi verir:

Array
(
    [0] => Array
        (
            [id] => 137
            [trackid] => 153
            [table_name] => jos_menu
            [operation] => UPDATE
            [oldvalue] => 0
            [newvalue] => 62
            [field] => checked_out
            [live] => 0
            [changedone] => 2010-05-11 17:46:28
        )
    [1] => Array
        (
            [id] => 138
            [trackid] => 153
            [table_name] => jos_menu
            [operation] => UPDATE
            [oldvalue] => 0000-00-00 00:00:00
            [newvalue] => 2010-05-11 12:16:28
            [field] => checked_out_time
            [live] => 0
            [changedone] => 2010-05-11 17:46:28
        )
    [2] => Array
        (
            [id] => 139
            [trackid] => 153
            [table_name] => jos_menu
            [operation] => UPDATE
            [oldvalue] => Subhash
            [newvalue] => Subhashgfhfgh
            [field] => name
            [live] => 0
            [changedone] => 2010-05-11 17:46:35
        )
    [3] => Array
        (
            [id] => 140
            [trackid] => 153
            [table_name] => jos_menu
            [operation] => UPDATE
            [oldvalue] => subhash
            [newvalue] => subhashhfhf
            [field] => alias
            [live] => 0
            [changedone] => 2010-05-11 17:46:35
        )
    [4] => Array
        (
            [id] => 141
            [trackid] => 153
            [table_name] => jos_menu
            [operation] => UPDATE
            [oldvalue] => 62
            [newvalue] => 0
            [field] => checked_out
            [live] => 0
            [changedone] => 2010-05-11 17:46:35
        )
    [5] => Array
        (
            [id] => 142
            [trackid] => 153
            [table_name] => jos_menu
            [operation] => UPDATE
            [oldvalue] => 2010-05-11 12:16:28
            [newvalue] => 0000-00-00 00:00:00
            [field] => checked_out_time
            [live] => 0
            [changedone] => 2010-05-11 17:46:35
        )
)

here in this array I dont want any values to be displayed twice for, i.e. I ned the first occurrence of the value only. Now here u can see that the index "field" has repeated values i.e. "checked_out" and "checked_out_time" other indexes have single occurrence, now what should I do to select/grab the first occurrence of the repetitive values only?

2 Cevap

Bu veritabanı sorgu sonucu gibi görünüyor, bu yüzden sadece tek field değerlerini seçmek için sorguyu değiştirmek için öneririm.

<UPDATE> field değerleri benzersiz almak için, bu sütunda gruplandırma deneyebilirsiniz:

SELECT j1.*
FROM jos_audittrail j1
  LEFT OUTER JOIN jos_audittrail j2 ON (
    j1.trackid != j2.trackid
    AND j1.field != j2.field
    AND j1.changedone < j2.changedone
  )
WHERE j1.operation = 'UPDATE'
  AND j2.id IS NULL
GROUP BY j1.field

Eğer GROUP BY, yani diğer tüm seçili sütunları eklemek gerekebilir. GROUP BY j1.field, j1.id, j1.trackid, .... </UPDATE>

Eğer biraz daha fazla bağlam verebilir eğer yardımcı olur: sen ne ulaşmak için çalışıyoruz, hangi sistem kullanıyorsanız, beklenen çıkış, veritabanı sorgu vb, idam ve varlık: ({[(tamsayı anahtarları ve değerleri lütfen kaldırın 0)]}) hata ayıklama çıkışı, çünkü ([field] => checked_out_time) aynı, ama daha anlamlı bir anahtar ile herhangi bir bilgi eklemek gerekmez.

Eğer çıkış ne tür bekliyoruz? Eğer başarmak için çalışıyoruz ne bir kod örneği verebilir misiniz?

Ben sağlanan bilgileri size verebilir tek şey işlevini kullanmanız gerektiğidir:

foreach($thatArray as $index => $subArray)
 if(($key = array_search('checked_out', $subArray))!==false)
  return $key;

Ben de bunu istiyorum düşünüyorum.