PDA

View Full Version : خطای offset



saeidkhphp
شنبه 02 اسفند 1393, 12:11 عصر
سلام دوستان ، من کدم رو کامل کردم ولی برای یک رشته URL فقط کار میکنه * ملاحظه کنید این رو :

<?php
// get host name from URL
$reza= "http://www.php.net";
preg_match('@^(?:http://)?([^/]+)@i', $reza, $matches );
echo $matches[1];?>

این کد کار میکنه و نتیجه میده نتیجش هم چاپ عبارت www.php.net (http://www.php.net) هست.
ولی وقتی میخام در متغیر $reza از رشته های دیگه استفاده کنم (از آدرس سایت های دیگه ) مثل زیر :


<?php
// get host name from URL
$reza= "http://www.php.net"."http://www.google.net";
preg_match('@^(?:http://)?([^/]+)@i', $reza, $matches );
echo $matches[2];?>

پیغام خطایی که میده : Notice: Undefined offset: 2 in C:\wamp\www\1.php on line 54
البته بعضی وقتا هم که طبق اصول خود سایت php میرم و خود offset رو تعریف میکنم و PREG_PATTERN_ORDER رو پیغام خطاش این جوری میشه : Notice: Array to string conversion in C:\wamp\www\1.php on line 54
البته فرم کلی استفاده از این دستور هم به نحو زیر از سایت php وجود داره :

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int$offset = 0 ]]] )

خواهش میکنم کمک کنید :ناراحت:

id1385
شنبه 02 اسفند 1393, 21:34 عصر
دقیقاً میخوای چیکار کنی؟
چرا دوتا آدرسارو بهم چسبوندی بدون هیچ فاصله ای ؟

<?php
// get host name from URL
$reza= "http://www.php.net"." http://www.google.net";
$patern = '/\b(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i';
preg_match_all($patern , $reza, $matches);


if(isset($matches[0]))
var_dump($matches[0]);


نتیجه:

array (size=2)
0 => string 'http://www.php.net' (length=18)
1 => string 'http://www.google.net' (length=21)


برای اینکه توی آرایه و متغیرها خطا نگیری اول چک کن ببین اصلاً ست شده یا نه

موفق باشید

saeidkhphp
شنبه 02 اسفند 1393, 22:22 عصر
واقعن ممنونم ازتون لطف بزرگی کردین

saeidkhphp
شنبه 02 اسفند 1393, 22:39 عصر
فقط ببخشید این سوال مبتدیانه رو میپرسم ، این var_dump چه میکنه که چاپ میشه نتیجه؟ مگه کارش چاپ با تعیین نوع متغیر نیست ؟ مثلن integer بودن یا اینا ، این مشکلی نیست ، مشکلم اینه که چرا بجاش اگه
echo $matches[0] رو بذاریم خطا میده !
خیلی ممنونم ازتون

hamedarian2009
شنبه 02 اسفند 1393, 23:19 عصر
فقط ببخشید این سوال مبتدیانه رو میپرسم ، این var_dump چه میکنه که چاپ میشه نتیجه؟ مگه کارش چاپ با تعیین نوع متغیر نیست ؟ مثلن integer بودن یا اینا ، این مشکلی نیست ، مشکلم اینه که چرا بجاش اگه
echo $matches[0] رو بذاریم خطا میده !
خیلی ممنونم ازتون

خب این خودش اندیس صفرش هم یک آرایه هست و نمیتونید آرایه رو مستقیم اکو بگیرین