v2.5.2
Giriş yap

Dizi içinden ad soyad birleştirme

rephp7
545 defa görüntülendi ve 1 kişi tarafından değerlendirildi
<input type="text" class="form-control" name="adi[]">
<input type="text" class="form-control" name="soyadi[]">

 $adi = $_POST["adi"];
 $soyadi = $_POST["soyadi"];
 
    $y = 0;
    if (!empty($_POST["adi"])) {

      foreach ($adi as $key => $value) {
        $y_adi = $value;
        $y_soyadi = $soyadi[$key];
        
      // $y_yazar = $y_adi . ' ' . $y_soyadi; 
      
       //insert fonksiyonum burada..! 
       //("INSERT INTO yazarlar ...
      //   ....);
    $y++;
       
       }

Dizi içinden indisine göre ad, soyad inputlarını nasıl birleştiririm?

$y_yazar = $y_adi . ' ' . $y_soyadi; Bu şekilde yaptım sadece 1. yazarın adı soyadı birleşti ve öylece insert etti, diğer yazarlar insert olmadı.

Birde tüm yazar adlarını dizinden alıp virgül ile birleştirmem lazım.
Ali Kaya, Veli Toprak, Ahmet Su şeklinde başka bir tabloya yollamak için lazım.

Dizi elemanlarını tekrardan foreach alıp implode mi yapmalıyım? nasıl yapacağımı çözemedim.

Cevap yaz
Cevaplar (10)
munzevi
723 gün önce
foreach ($adi as $key => $value) {
    $yazar[] = $value.' '.$soyadi[$key];
}
$projeyazarlari = implode(', ', $yazar);

mübarek sen beni çok yordun ya. biraz daha temele inip, syntaxı anlamaya çalışmanı tavsiye ederim. birde soru sorarkende sakin kal, başlık içerikle çok alakalı değil teknikte değil. kaç kere cevapta yazıldı, çözümede ulaşamadık. sence çözüme ulaşılması bu kadar zor bir şey mi sordun? hayır tabi. pratiğe geçmeden, biraz daha teoride bilgilerini pekiştir.

rephp7
723 gün önce

$yazar[] yapınca adsoyadı doğru birleştirmiyor onun yerine tabloya direk "Array" yazıyordu. O yüzden işin içinden çıkamamıştım.
Bende $projeyazarları için $yazark[] yazıp implode için $yazark 'yi kullandım. bu şekilde işimi gördü.

foreach ($adi as $key => $value) {
    $yazar = $value.' '.$soyadi[$key];
    $yazark[] = $value.' '.$soyadi[$key];
}
$projeyazarlari = implode(', ', $yazark);

Destek için tekrar teşekkürler @munzevi.

rephp7
723 gün önce

@munzevi hocam, işin içinden çıkamadım. Kodlarım aşağıda düzeltmeniz mümkün mü?

if ($_POST) {

      $i = 0;
      if (!empty($_POST["adi"])) {

        $adi = $_POST["adi"];
        $soyadi = $_POST["soyadi"];
        $yazar=array();
        $yazar_sira = $_POST["yazar_sira"];

            foreach ($adi as $key => $value) {
              $y_adi = $value;
              $y_soyadi = $soyadi[$key];
              $y_sira = $yazar_sira[$key];
    
              $yazar=$value.' '.$soyadi[$key];
    
              $islem = ......
                "INSERT INTO yazarlar",
               .........
              );
              $i++;
            };

        $projeyazarlari[]= implode(', ', $yazar);

        $islem = .....
          "INSERT INTO proje",
            ..........
            
      } else {
        echo "yazar adı yok!";  };
munzevi
723 gün önce

döngü bitince implode'yi kullan

$yazar=$value.' '.$soyadi[$key]; bu dizi değil, değişken olarak tanımlanıyor

$yazar[] = şeklinde olmalı

rephp7
723 gün önce
$yazar=array();

 foreach ($adi as $key => $value) {
  $y_adi = $value;
  $y_soyadi = $soyadi[$key];
  $y_sira = $yazar_sira[$key];
  
  $yazar=$value.' '.$soyadi[$key];
  $projeyazarlari= implode(', ', $yazar);
  ....

$projeyazarlari için şu hata mesajını veriyor.
Hata mesajı: Expected type 'null|array'. Found 'string'.intelephense(1006)

foreach dışında alınca da Warning: implode(): Invalid arguments passed in ... hatası veriyor.

munzevi
725 gün önce
$sonuc = implode(', ', $adsoyad);
echo $sonuc;

bunun için implode kullanman gerek, dizileri birleştirir.

rephp7
725 gün önce

inputlarım bunlar:

<input type="text" class="form-control" name="adi[]">
<input type="text" class="form-control" name="soyadi[]">

Dizi:
["adi"]=>
  array(3) {
    [0]=>  string(3) "Ali"
    [1]=>  string(4) "Veli"
    [2]=>  string(4) "Zeki"
  }
  ["soyadi"]=>
  array(3) { 
    [0]=> string(4) "Kaya"
    [1]=> string(6) "Toprak"
    [2]=> string(2) "Su"
  }

İstediğim ek çıktılar:
$adsoyad: bunu verdiğiniz kod ile ad soyad birleştirerek istediğimi aldım.
Ali Kaya
Veli Toprak
Zeki Su.

Birde
$projeyazarı olarak: "Kaya Ali, Veli Toprak, Zeki Su"
şeklinde virgül ile birleştirilmiş halde çıktı almak istiyorum.

Yazarlar tablosu:

Yazaradisoyadi
Ali KayaAliKaya
Veli ToprakVeliToprak

Projeler tablosu:

Proje Noprojeyazari
0012523Kaya Ali, Veli Toprak, Zeki Su
munzevi
726 gün önce

anlamadım. birleştirmek istediğin dizinin örneği ile birlikte yazarsan, daha iyi olur.

rephp7
726 gün önce

teşekkürler @munzevi,
peki tüm adsoyadları şu şekilde nasıl birleştirebilirim?
ali k, ceren b, eren e,

munzevi
728 gün önce
$arr = [
    0 => ["ad" => "ali", "soyad" => "k"],
    1 => ["ad" => "ceren", "soyad" => "b"],
    2 => ["ad" => "eren", "soyad" => "e"],
    3 => ["ad" => "erdem", "soyad" => "a"],
    4 => ["ad" => "burak", "soyad" => "s"],
    5 => ["ad" => "uğur", "soyad" => "u"],
];
$adSoyad = array();
foreach($arr as $key => $value){
    $adSoyad[] = $value["ad"]." ".$value["soyad"];
}
print_r($adSoyad);