lostyazilim
tr.link

Bir dizi içinde tekrarlanan kayıtların anahtarlarını bulma

5 Mesajlar 786 Okunma
lstbozum
tr.link

melihonline melihonline WM Aracı Kullanıcı
  • Üyelik 24.11.2018
  • Yaş/Cinsiyet 39 / E
  • Meslek Bilgisayar Teknikeri
  • Konum Antalya
  • Ad Soyad M** K**
  • Mesajlar 91
  • Beğeniler 8 / 7
  • Ticaret 0, (%0)

Merhaba arkadaşlar. Benim bir dizim var. Dizi de içeriği aynı olan değerler var. Bu aynı değerleri bulmak ve o değerlerin anahtar değerini öğrenmek istiyorum.

Mesela aşağıdaki gibi dizi olsun. Bu dizi içinde "Melih" olan değerlerin anahtarları lazım. 0, 4 ve 7 numaralı anahtarları bulabilir miyiz?

 

0 -> Melih

1 -> Şüheda

2 -> Zeliha

3 -> Mehmet

4 -> Melih

5 -> Murat

6 -> Selçuk

7 -> Melih

 

 

wmaraci
reklam

caneraltinel caneraltinel WM Aracı Kullanıcı
  • Üyelik 30.10.2013
  • Yaş/Cinsiyet 28 / E
  • Meslek Girişimci & Web Developer
  • Konum İstanbul Avrupa
  • Ad Soyad C** A**
  • Mesajlar 252
  • Beğeniler 33 / 35
  • Ticaret 26, (%100)

Bu kod önce her bir elemanı kontrol eder ve her bir değer için bir "anahtar-değer" sözlüğüne ekleme yapar. Daha sonra, sözlükteki her bir değer için, eğer birden fazla anahtar varsa, bu anahtarları ekrana yazdırır.

 

Örneğin, aşağıdaki örnekteki dizi örneğinde, "Melih" değeri üç kez bulunuyor ve bu değere sahip anahtarlar 0, 4 ve 7'dir. Bu nedenle, PHP kodu bu anahtarları ve değeri ("Melih") ekrana yazdıracaktır.

Kendine göre uyarlayabilirsin. Umarım bu yardımcı olur.

<?php
$dizi = array("Melih", "Şüheda", "Zeliha", "Mehmet", "Melih", "Murat", "Selçuk", "Melih");
$anahtarlar = array();

for ($i = 0; $i < count($dizi); $i++) {
    if (!isset($anahtarlar[$dizi[$i]])) {
        $anahtarlar[$dizi[$i]] = array($i);
    } else {
        array_push($anahtarlar[$dizi[$i]], $i);
    }
}

foreach ($anahtarlar as $anahtar => $deger) {
    if (count($deger) > 1) {
        echo $anahtar . " anahtarına sahip değer " . $dizi[$deger[0]] . " " . implode(",", $deger) . " indekslerinde bulunuyor." . "\n";
    }
}
?>
BEYAZMASTER

kişi bu mesajı beğendi.

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

caneraltinel adlı üyeden alıntı

Bu kod önce her bir elemanı kontrol eder ve her bir değer için bir "anahtar-değer" sözlüğüne ekleme yapar. Daha sonra, sözlükteki her bir değer için, eğer birden fazla anahtar varsa, bu anahtarları ekrana yazdırır.

 

Örneğin, aşağıdaki örnekteki dizi örneğinde, "Melih" değeri üç kez bulunuyor ve bu değere sahip anahtarlar 0, 4 ve 7'dir. Bu nedenle, PHP kodu bu anahtarları ve değeri ("Melih") ekrana yazdıracaktır.

Kendine göre uyarlayabilirsin. Umarım bu yardımcı olur.

<?php
$dizi = array("Melih", "Şüheda", "Zeliha", "Mehmet", "Melih", "Murat", "Selçuk", "Melih");
$anahtarlar = array();

for ($i = 0; $i < count($dizi); $i++) {
    if (!isset($anahtarlar[$dizi[$i]])) {
        $anahtarlar[$dizi[$i]] = array($i);
    } else {
        array_push($anahtarlar[$dizi[$i]], $i);
    }
}

foreach ($anahtarlar as $anahtar => $deger) {
    if (count($deger) > 1) {
        echo $anahtar . " anahtarına sahip değer " . $dizi[$deger[0]] . " " . implode(",", $deger) . " indekslerinde bulunuyor." . "\n";
    }
}
?>

 Üstadım aynı olan değerlerin sadece bir tanesini göstermesi diğerlerini yok sayması için kodu nasıl güncellemeliyiz?

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.

caneraltinel caneraltinel WM Aracı Kullanıcı
  • Üyelik 30.10.2013
  • Yaş/Cinsiyet 28 / E
  • Meslek Girişimci & Web Developer
  • Konum İstanbul Avrupa
  • Ad Soyad C** A**
  • Mesajlar 252
  • Beğeniler 33 / 35
  • Ticaret 26, (%100)
$dizi = array("Melih", "Şüheda", "Zeliha", "Mehmet", "Melih", "Murat", "Selçuk", "Melih");
$anahtarlar = array();

for ($i = 0; $i < count($dizi); $i++) {
    if (!isset($anahtarlar[$dizi[$i]])) {
        $anahtarlar[$dizi[$i]] = array($i);
    } else {
        array_push($anahtarlar[$dizi[$i]], $i);
    }
}

$sonuc = array(); // yeni dizi oluşturuldu

foreach ($anahtarlar as $anahtar => $deger) {
    if (count($deger) > 1) {
        $sonuc[$anahtar] = $dizi[$deger[count($deger) - 1]] . " " . implode(",", $deger) . " indekslerinde bulunuyor."; // son değer eklendi
    }
}

foreach ($sonuc as $deger) {
    echo $deger . "\n"; // sadece son değer ekrana basıldı
}

BEYAZMASTER adlı üyeden alıntı

 Üstadım aynı olan değerlerin sadece bir tanesini göstermesi diğerlerini yok sayması için kodu nasıl güncellemeliyiz?

 

BEYAZMASTER

kişi bu mesajı beğendi.

wmaraci
wmaraci

melihonline melihonline WM Aracı Kullanıcı
  • Üyelik 24.11.2018
  • Yaş/Cinsiyet 39 / E
  • Meslek Bilgisayar Teknikeri
  • Konum Antalya
  • Ad Soyad M** K**
  • Mesajlar 91
  • Beğeniler 8 / 7
  • Ticaret 0, (%0)

caneraltinel adlı üyeden alıntı

Bu kod önce her bir elemanı kontrol eder ve her bir değer için bir "anahtar-değer" sözlüğüne ekleme yapar. Daha sonra, sözlükteki her bir değer için, eğer birden fazla anahtar varsa, bu anahtarları ekrana yazdırır.

 

Örneğin, aşağıdaki örnekteki dizi örneğinde, "Melih" değeri üç kez bulunuyor ve bu değere sahip anahtarlar 0, 4 ve 7'dir. Bu nedenle, PHP kodu bu anahtarları ve değeri ("Melih") ekrana yazdıracaktır.

Kendine göre uyarlayabilirsin. Umarım bu yardımcı olur.

<?php
$dizi = array("Melih", "Şüheda", "Zeliha", "Mehmet", "Melih", "Murat", "Selçuk", "Melih");
$anahtarlar = array();

for ($i = 0; $i < count($dizi); $i++) {
    if (!isset($anahtarlar[$dizi[$i]])) {
        $anahtarlar[$dizi[$i]] = array($i);
    } else {
        array_push($anahtarlar[$dizi[$i]], $i);
    }
}

foreach ($anahtarlar as $anahtar => $deger) {
    if (count($deger) > 1) {
        echo $anahtar . " anahtarına sahip değer " . $dizi[$deger[0]] . " " . implode(",", $deger) . " indekslerinde bulunuyor." . "\n";
    }
}
?>

Çok teşekkürler hocam elinize sağlık. Kodları çalıştırdığımda dizi içerisinde 4 tane aynı değer var. Onun 3 tanesini doğru buluyor ancak ilk sıradakini bulamıyor. Çok saçma bir durum anlamadım gitti.

Kodları çalıştırıyorum şöyle sonuç çıkıyor.

ZRGYO anahtarına sahip değer ZRGYO 8396,12330,15313 indekslerinde bulunuyor.

Ama şu şekilde çıkması gerekiyor.

ZRGYO anahtarına sahip değer ZRGYO 3996, 8396,12330,15313 indekslerinde bulunuyor.

İlk baştaki 3996 anahtarını neden atlıyor çözemedim.

 

 

Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al