PDA

View Full Version : تابعی مشابه array_search



mhabat
پنج شنبه 24 مرداد 1392, 03:40 صبح
با سلام.
از طریق تابعarray search میشه شماره اندیس خانه مورد نظر رو پیدا کرد!
حالا فکر کنید یک آرایه داریم که داخل یکی از خانه این عبارت قرار داره:


name is mohammad

من دنبال راهی هستم که مثل تابع array_search عمل کنه با این تفاوت که
تمام عبارت داخل خانه رو وارد نکنم بلکه بخشی از عبارت رو وارد کنم.
مثلا به این شکل شه:



$str="name is mohammad";
$b=array_search("name",$str);
echo $b;

یعنی اگه راهی باشه خیلی عالی میشه!

kartuf
پنج شنبه 24 مرداد 1392, 04:03 صبح
خوب دوست من شما باید از ارایه دو بعدی استفاده کنید به این صورت که عبارات داخل ارایه هم با explode به ارایه تبدیل کنید و بعد به جستجو ادامه بهید درواقع هر خانه آرایه خود توانایی تبدیل شدن به ارایه را دارند

Javidhb
پنج شنبه 24 مرداد 1392, 11:21 صبح
()array_filter (http://php.net/manual/en/function.array-filter.php)



$myArray = array(
'name' => 'my name is x',
'age' => 'my age is x'
);

function mySearch($haystack) {
$needle = 'age';
return(strpos($haystack, $needle));
}

$results = array_filter($myArray, 'mySearch');

var_dump($results);

mhabat
پنج شنبه 24 مرداد 1392, 12:03 عصر
دقیقا نفهمیدم کاره این array_filter چیه!(در php manual).پارامتر دوم این تابع خودش یک تابع هست. تابع دومیه خودش پارامتر نمی خواد؟.....!
ممنون بابت کد. ولی من م خوام به این شکل باشه:

<?php
$myArray = array(
'name' => 'name is x',
'age' => 'my age is x'
);

function mySearch($haystack) {
$needle = 'my';
return(strpos($haystack, $needle));
}

$results = array_filter($myArray, 'mySearch');

echo $results;
?>

این طوری میشه؟

Javidhb
پنج شنبه 24 مرداد 1392, 14:07 عصر
اینجوری کامل تر شد... حالا اگه عبارتی که دارید دنبالش میگردید اول جمله باشه اون مقدار رو هم برمیگردونه.. مثل "my"


$myArray = array(
'name' => 'name is x',
'age' => 'my age is y'
);

function mySearch($haystack) {
$needle = 'age';
$pos = strpos($haystack, $needle);

if($pos === 0) return true; //اگه اولین کلمه بود
return($pos); //اگه توی آراینه وجود داشت
}

$results = array_filter($myArray, 'mySearch');

var_dump($results);

Javidhb
پنج شنبه 24 مرداد 1392, 14:26 عصر
array_filter میاد تک تک اعضاش رو توسط یه تابع, فیلتر میکنه.


مثال: فرض کنید که یه آرایه دارید که توش اعداد 0 تا 5 هست.
حالا میخاید این آرایه رو طوری فیلتر کنید که فقط توش اعداد زوج بمونن.
اول باید که تابع به اسم ()even بسازید که یه عدد بگیره و اگه زوج بود true رو برگردونه.(()even میشه تابع فیلترتون)
حالا با ()array_filter میاید و تک تک عناصر آرایه خودتون رو فیلتر میکنید ... یعنی تک تک اعداد داخلش رو با تابع ()even میسنجید اگه مقدار true از تابع برگرده اون مقدار توی آرایه میمونه والا چون از فیلتر رد نشده حذف میشه.



$numbersArray = array('0', '1', '2', '3', '4', '5');

function even($var)
{
if ($var % 2 == 0)
{
return true;
}
}

$results = array_filter($numbersArray, 'even');

var_dump($results);



کد های بالا رو میشه به شکل زیر هم نوشت:

اینجا بصورت دستی خودمون میایم توی تک تک عنصرها آرایه با foreach میگردیم که ببینیم زوج هستن یا نه.



$numbersArray = array('0', '1', '2', '3', '4', '5');
function even($haystack) {
$evenArray = array();
foreach ($haystack as $element)
{
if ($element % 2 == 0)
{
$evenArray[] = $element;
}
}
return $evenArray;
}

var_dump(even($numbersArray));