PDA

View Full Version : سوال: دریافت آرایه از فایل ، تغییر و ذخیره آن



pejman_view
شنبه 27 اسفند 1390, 16:57 عصر
سلام

من یک فایل دارم که تمامی آرایه های من در آن ذخیره شده ، چون تعداد آرایه ها خیلی زیاده می خوام یک سری تغییرات در آن ها بدم اما می خوام این آرایه ها را تغییر بدهم و آن ها را در یک فایل دیگر ذخیره کنم.
کسی ایده ایی داره که چطور اینکارو بکنم؟
1- از یک فایل آرایه ها را بخوانم
2- تغییرات لازمه رو بدهم
3- تغییرات رو ذخیره کنم
تمام مراحل 1و2 آسونه اما روش ذخیره کردن آرایه رو داخل فایل را نمی دونم.

MMSHFE
شنبه 27 اسفند 1390, 18:27 عصر
با سلام، فرض کنید کد فایل آرایه شما که به اسم array.php ذخیره شده، اینه:


<?php
$arr = new array();
$arr[] = 'ali';
$arr[] = 'reza';
$arr[] = 'mohsen';
?>

حالا شما میخواین اینو بخونید و یک خونه دیگه بهش اضافه کنید و دوباره اون رو ذخیره کنید. این کد رو ببینید:


require_once 'array.php';
arr[] = 'mohammad';
$output = '<?php'.PHP_EOL;
$output .= ' $arr = array();'.PHP_EOL;
foreach($arr as $item) {
$output .= " \$arr[] = '{$item}';".PHP_EOL;
}
$output .= '?>'.PHP_EOL;
file_put_contents('array.php', $output);

موفق باشید.

رضا قربانی
شنبه 27 اسفند 1390, 18:42 عصر
خب مرحله یک و دو رو که بلدی مرحله سه هم باید ذخیره کنی با هر پسوندی که دوست داری و بهش یک مقدار جدید بدی :
اگه نام های فایل رو یکی بدی تغییرات اعمال می شه و روی همون فایل ذخیره می شه.


$file = 'file.php';
$content = "<?php\n echo 'This is created file And Arry'; \n ?> ";
file_put_contents($file, $content);

Mr.Moghadam
یک شنبه 28 اسفند 1390, 00:39 صبح
بهترین روش ذخیره آرایه ها در فایل serialize کردن آرایه است.پس از استفاده از تابع serialize آرایه رو در فایل ذخیره کن و وقتی از قایل خوندی آرایه رو unsterilize کن و ازش استفاده کن :


$ar = array ('a'=>'Apple' , 'o'=>Orange' , 'b'=>'banana');
file_put_contents('array.php' , serialize($ar));



برای خواندن اطلاعات ذخیره شده در فایل هم :


$ar = unserialize(file_get_contents('array.php'));

pejman_view
یک شنبه 28 اسفند 1390, 01:15 صبح
سلام

مشکلم اینه خروجی فقط اینو نمایش می ده:
array
حتی با سریالایز کردن فقط اینو نمایش می ده:
s:7:"Array
";

اینم کدی که نوشتم:


include("arrays.php");
for ($i=1;$i<=42;$i++){
${"nbid".$i} = ${"bid".$i};
${"nbid".$i}[2]['ck1'] = ceil(${"bid".$i}[2]['ck1']*1.31);
${"nbid".$i}[2]['ck2'] = ceil(${"bid".$i}[2]['ck2']*1.31);
${"nbid".$i}[2]['ck3'] = ceil(${"bid".$i}[2]['ck3']*1.31);
${"nbid".$i}[2]['ck4'] = ceil(${"bid".$i}[2]['ck4']*1.31);

}
file_put_contents("test.php",serialize($nbid1."\r\n"));

Reza1607
یک شنبه 28 اسفند 1390, 01:37 صبح
متغيير رو با دستور print_r چاپ كن ببين چي چاپ ميشه بعد براساس اون انديس بعد اول رو مشخص كن

pejman_view
یک شنبه 28 اسفند 1390, 02:14 صبح
سلام

اولین کاری که کردم از پر بودن متغیر اطمینان حاصل کردم بعدا این پست رو نوشتم.

Reza1607
یک شنبه 28 اسفند 1390, 02:24 صبح
من كه نگفتم كه آرايه خالي هستش
گفتم شايد به صورت آرايه داخل يك خونه از آرايه ذخيره شده كه معمولا موقعي كه مي خواين چاپ كنيد همون چيزي رو مي نويسه كه شما نوشتيد

pejman_view
یک شنبه 28 اسفند 1390, 04:48 صبح
سلام


ممنون از پاسختون اما من اصطلاحات فارسی برنامه نویسی را متوجه نمی شم اما مولتی دیمنشال آرایه هستش اگر منظورت این بود.

Reza1607
یک شنبه 28 اسفند 1390, 10:52 صبح
بله منظور من همينه
مي تونيد تكه كد بيشتري بزاريد

مطمئنا خروجي اين تكه كد array هست

$arr[0][]=array(1,'test');
$arr[0][]=array(2,'testi');
echo $arr[0];

pejman_view
یک شنبه 28 اسفند 1390, 19:54 عصر
سلام

ممنون از پاسختان اما متاسفانه به نتیجه برای ذخیره اش نرسیدم اما مشکلم اینه که عمق آرایه ها متغیر است و بعضی ها تا 20 تا عمق هم دارند.

با تشکر

Reza1607
یک شنبه 28 اسفند 1390, 20:16 عصر
براي كار با آرايه هايي كه عمق نامحدودي دارن و يا اينكه طولشون مشخص نيست از foreach استفاده كنيد و يا اين كه به صورت بازگشتي پياده سازي كنيد

MMSHFE
یک شنبه 28 اسفند 1390, 23:53 عصر
اگه میشه یک نمونه از محتویات فایل آرایه رو بگذارین تا بشه دقیقتر راهنمایی کنیم.

pejman_view
چهارشنبه 02 فروردین 1391, 13:06 عصر
$sid1=array(array('drop'=>2),array('toox'=>40,'clay'=>100,'vir'=>50,'gope'=>60,'azt'=>2,'pc'=>1,'drop'=>5,'time'=>260),array('toox'=>65,'clay'=>165,'vir'=>85,'gope'=>100,'azt'=>1,'pc'=>1,'drop'=>9,'time'=>620),array('toox'=>110,'clay'=>280,'vir'=>140,'gope'=>165,'azt'=>1,'pc'=>2,'drop'=>15,'time'=>1190),array('toox'=>185,'clay'=>465,'vir'=>235,'gope'=>280,'azt'=>1,'pc'=>2,'drop'=>22,'time'=>2100),array('toox'=>310,'clay'=>780,'vir'=>390,'gope'=>465,'azt'=>1,'pc'=>2,'drop'=>33,'time'=>3560),array('toox'=>520,'clay'=>1300,'vir'=>650,'gope'=>780,'azt'=>2,'pc'=>3,'drop'=>50,'time'=>3638),array('toox'=>870,'clay'=>2170,'vir'=>1085,'gope'=>1300,'azt'=>2,'pc'=>4,'drop'=>70,'time'=>7220),array('toox'=>1450,'clay'=>3625,'vir'=>1810,'gope'=>2175,'azt'=>2,'pc'=>4,'drop'=>100,'time'=>15590),array('toox'=>2420,'clay'=>6050,'vir'=>3025,'gope'=>3630,'azt'=>2,'pc'=>5,'drop'=>145,'time'=>25150),array('toox'=>4040,'clay'=>10105,'vir'=>5050,'gope'=>6060,'azt'=>2,'pc'=>6,'drop'=>200,'time'=>40440),array('toox'=>6750,'clay'=>16870,'vir'=>8435,'gope'=>10125,'azt'=>2,'pc'=>7,'drop'=>280,'time'=>64900),array('toox'=>11270,'clay'=>28175,'vir'=>14090,'gope'=>16905,'azt'=>2,'pc'=>9,'drop'=>375,'time'=>104050),array('toox'=>18820,'clay'=>47055,'vir'=>23525,'gope'=>28230,'azt'=>2,'pc'=>11,'drop'=>495,'time'=>166680),array('toox'=>31430,'clay'=>78580,'vir'=>39290,'gope'=>47150,'azt'=>2,'pc'=>13,'drop'=>635,'time'=>266880),array('toox'=>52490,'clay'=>131230,'vir'=>65615,'gope'=>78740,'azt'=>2,'pc'=>15,'drop'=>800,'time'=>427210),array('toox'=>87660,'clay'=>219155,'vir'=>109575,'gope'=>131490,'azt'=>3,'pc'=>18,'drop'=>1000,'time'=>683730),array('toox'=>146395,'clay'=>365985,'vir'=>182995,'gope'=>219590,'azt'=>3,'pc'=>22,'drop'=>1300,'time'=>1094170),array('toox'=>244480,'clay'=>611195,'vir'=>305600,'gope'=>366715,'azt'=>3,'pc'=>27,'drop'=>1600,'time'=>1750880),array('toox'=>408280,'clay'=>1020695,'vir'=>510350,'gope'=>612420,'azt'=>3,'pc'=>32,'drop'=>2000,'time'=>2801600),array('toox'=>681825,'clay'=>1704565,'vir'=>852280,'gope'=>1022740,'azt'=>3,'pc'=>38,'drop'=>2450,'time'=>4482770));

این یه نمونه از آرایه که می خوام بعضی از این عددها رو بصورت مشخص فرضاً برای اندیس 2 ضرب یک عدد خاص کنم دوباره ذخیره اش کنم بدون هیچ تغییری