آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

تغییر مقدار یک آیتم در حلقه for each

مهدی  10 سال پیش  10 سال پیش
0 0

سلام

 

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

$myarray = array(
'Name' => 'Mahdi',
'Family' => 'Poya',
'Father' => 'Mohammad',
'addres' => 'Semnan',
);

foreach($myarray as $row=>$target){
echo '<pre>' . print_r($row,true) . '</pre>';
$row['Name'] = 'Hi, ' . $row['Name'];
echo '<hr>';
echo '<pre>' . print_r($target,true) . '</pre>';
}

حالا قصد دارم هنگامی که تو حلقه for each بتونم مقادیر رو تغییر بدم.

مثلا بتونم تو حلقه بگم که تمامی ایندکس های Name یه بلایی سرش بیاد به شکل زیر:

$row['Name'] = 'Hi, ' . $row['Name'];
0 0
در اصل می خوام بدونم چطوری میشه تو حلقه foreach به ایندکس ها دسترسی پیدا کرد و بشه تغییرشون داد. مثلا من چطوری می تونم به ایندکس Name تو حلقه foreach دسترسی پیدا کنم و lمقدارش رو تغییر بدم ؟ (10 سال پیش)
0 0
خب اگه ایندکس همه آرایه‌ها برابر باشه می‌تونید از همون اسم استفاده کنید. مثلا چندین آرایه دارید که ایندکس Name توشون مشترک هست. می‌تونید در همه ایندکس Name رو صدا بزنید. دقیقا همین کدی که نوشتید رو توی حلقه استفاده کنید. (10 سال پیش)
0 0
ممنونم . بله ایندکس ها تماما برابر هستند و همه یک نام دارند. اما نتونستم از این کد استفاده کنم. آیا راهکاری شما سراغ دارید؟ (10 سال پیش)
0 0
خطایی که نشون داده می‌شه رو بزارید (10 سال پیش)
0 0
Warning: Illegal string offset 'Name' in :) (10 سال پیش)
0 0
اگر امکان داره متن سوال رو تمیز کنید تا قابل خواندن‌تر بشه برای دیگران (10 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
مهدی  10 سال پیش
0 0

کسی نیست کمک بکنه؟

پاسخ به سوال 
Mr Mehdi  10 سال پیش
+1 0

درود بعد از بررسی کد متوجه شدم شما کلا قضیه حلقه Foreach رو بد متوجه شدید. وقتی این حلقه رو برای یک آرایه مثل myarray استفاده می‌کنید یعنی در هر بار اجرای حلقه، روی یکی از مقدارهای تابع، فانکشن رو اجرا می‌کنید. منظورم این هست که اگر مثلا آرایه myarray به این صورت باشه:

$myarray = array(
array( 'Name' => 'Mahdi', 'Family' => 'Poya', 'Father' => 'Mohammad', 'addres' => 'Semnan',
),
array( 'Name' => 'Mehrdad', 'Family' => 'Yousofi', 'Father' => 'Yousof', 'addres' => 'XYZ',
) );

بار اول فانکشن روی آرایه‌ای اجرا میشه که اسم شخص مهدی هست و بار دوم آرایه‌ای که اسم شخص مهرداد و دقیقا اشتباه شما اینجا بوده چون در کد شما در هربار اجرا یک String ارسال می‌شده و تابعی استفاده می‌کردید که مربوط به آرایه بوده و خطا ایجاد می‌شده.

به علاوه از حالت Key => Value زمانی استفاده میشه کرد که هر عضو آرایه یک Key داشته باشه که فکر نمیکنم کدی که مد نظر شما هست برای هر آرایه قرار باشه یک Key در نظر گرفته بشه پس این قسمت هم از نظر من اضافی هست و کد نهایی به صورت زیر میشه:

$myarray = array(
    array(
        'Name' => 'Mahdi',
        'Family' => 'Poya',
        'Father' => 'Mohammad',
        'addres' => 'Semnan',
    ),
    array(
        'Name' => 'Mehrdad',
        'Family' => 'Yousofi',
        'Father' => 'Yousof',
        'addres' => 'XYZ',
    )
);
foreach($myarray as $row){ echo '<pre>' . print_r($row,true) . '</pre>'; $row['Name'] = 'Hi, ' . $row['Name']; echo '<hr>'; }
0 0
من متوجه نشدم :( foreach به درد آرایه هایی می خوره که از ایندکس رشته ای استفاده می کنند. و در واقع نمیشه با یه for اون ارایه رو پیمایش کرد. این صحبته من درسته؟ (10 سال پیش)
0 0
دقیقا متوجه منظورتون نشدم. این حلقه‌ها همه‌جا کاربرد داره. کار این حلقه رو هم دیگه واقعا ساده‌تر از بالا نمی‌تونستم توضیح بدم :| (10 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .