Dizi içinden ad soyad birleştirme
<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.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (10)
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.
$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.
@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!"; };
$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.
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:
Yazar | adi | soyadi |
---|---|---|
Ali Kaya | Ali | Kaya |
Veli Toprak | Veli | Toprak |
Projeler tablosu:
Proje No | projeyazari |
---|---|
0012523 | Kaya Ali, Veli Toprak, Zeki Su |
$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);