غير معروف تعويض عند استخدام فب تنفجر ()
سؤال
ولقد كتبت ما اعتقدت استخدام بسيط جدا من وظيفة فب explode()
لتقسيم الاسم إلى الاسم الاول واسم العائلة:
// split name into first and last
$split = explode(' ', $fullname, 2);
$first = $split[0];
$last = $split[1];
ولكن، وهذا ما يفتح خطأ فب مع "Undefined offset: 1"
الرسالة. وظيفة لا يزال يبدو للعمل، ولكن أود أن توضيح كل ما تسبب في حدوث الخطأ. لقد دققت في فب دليل لكن الأمثلة على استخدام نفس بناء الجملة كما في الاعلى.
أعتقد أنني أفهم ما غير معروف إزاحة هو، ولكن لا استطيع ان ارى لماذا قانون بلدي يولد الخطأ!
المحلول
وهذا لأن FULLNAME لا يحتوي على مسافة. يمكنك استخدام خدعة بسيطة للتأكد من أن الفضاء هو دائما حيث
$split = explode(' ', "$fullname ");
و(لاحظ المسافة داخل الاقتباس)
وراجع للشغل، يمكنك استخدام قائمة () لتبسيط التعليمات البرمجية
list($first, $last) = explode(' ', "$fullname ");
نصائح أخرى
ويمكن أن يكون هذا بسبب حقيقة أن $fullname
لا تحتوي على حرف مسافة.
وهذا المثال يجب إصلاح مشكلتك ث / س عرض هذا الإشعار:
$split = explode(' ', $fullname, 2);
$first = @$split[0];
$last = @$split[1];
والآن إذا $fullname
هو "musoNic80"
أنك لن تحصل على رسالة إشعار.
ملاحظة استخدام أحرف "@"
.
وHTH الياس
وراجع للشغل، من شأنها أن الخوارزمية لا تعمل طوال الوقت. التفكير في كلمة اثنين لاتينا أو الإيطالية أسماء الألقاب مثل "دي كاسترو"، "ديلا كروز"، "لا روزا"، الخ سبليت سيعود 3 بدلا من 2 الكلمات:
Array {
[0] => 'Pedro'
[1] => 'De'
[1] => 'Castro'
}
وأنت سوف ينتهي مع رسائل مثل "مرحبا بعودتك آنا دي" أو "تحرير الملف الشخصي ل منصور لا".
وسوف ونفس الشيء يحدث لأسماء من كلمتين مثل "آن ماري ميلر"، "ويليام هوارد تافت"، وما إلى ذلك.
ومجرد تلميح.
ويفترض، مهما $fullname
هو لا يحتوي على مسافة، لذلك $split
صفيف يحتوي على عنصر واحد، لذلك يشير $split[1]
إلى غير معرف الإزاحة.
وهذا غريب، انها تعمل الصحيح هنا. عندما أحاول مع the cat walks
سلسلة وأيضا سوف the
مجرد القيام به ولا ينتج خطأ. لقد أنتج ذلك مع print_r
ما هو $fullname
الخاص بك يبدو عندما تحصل على خطأ؟