بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

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

مدیریت گفتگو
مهدی 10 سال پیش
آخرین تغییر: 10 سال پیش

سلام

 

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

$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'];

نظرات

مهدی 10 سال پیش
در اصل می خوام بدونم چطوری میشه تو حلقه foreach به ایندکس ها دسترسی پیدا کرد و بشه تغییرشون داد. مثلا من چطوری می تونم به ایندکس Name تو حلقه foreach دسترسی پیدا کنم و lمقدارش رو تغییر بدم ؟
Mr Mehdi 10 سال پیش
خب اگه ایندکس همه آرایه‌ها برابر باشه می‌تونید از همون اسم استفاده کنید. مثلا چندین آرایه دارید که ایندکس Name توشون مشترک هست. می‌تونید در همه ایندکس Name رو صدا بزنید. دقیقا همین کدی که نوشتید رو توی حلقه استفاده کنید.
مهدی 10 سال پیش
ممنونم . بله ایندکس ها تماما برابر هستند و همه یک نام دارند. اما نتونستم از این کد استفاده کنم. آیا راهکاری شما سراغ دارید؟
Mr Mehdi 10 سال پیش
خطایی که نشون داده می‌شه رو بزارید
مهدی 10 سال پیش
Warning: Illegal string offset 'Name' in :)
Mr Mehdi 10 سال پیش
اگر امکان داره متن سوال رو تمیز کنید تا قابل خواندن‌تر بشه برای دیگران

پاسخ‌ها 2

مهدی 10 سال پیش

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

نظرات

Mr Mehdi 10 سال پیش

درود بعد از بررسی کد متوجه شدم شما کلا قضیه حلقه 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>'; }

نظرات

مهدی 10 سال پیش
من متوجه نشدم :( foreach به درد آرایه هایی می خوره که از ایندکس رشته ای استفاده می کنند. و در واقع نمیشه با یه for اون ارایه رو پیمایش کرد. این صحبته من درسته؟
Mr Mehdi 10 سال پیش
دقیقا متوجه منظورتون نشدم. این حلقه‌ها همه‌جا کاربرد داره. کار این حلقه رو هم دیگه واقعا ساده‌تر از بالا نمی‌تونستم توضیح بدم :|

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