ایجاد آرایه چند بعدی برای کار با json

i-php-i

Active Member
من از کد زیر برای ایجاد ارایه چند بعدی و تبدیل اون به جی سان استفاده می کنم. لطفا بگید که آیا این روش درست هست یا نه؟

PHP:
$i=0;
while($row=$result->fetch_assoc())
        {
            $i++;
            extract($row);
            $arr[$i][id]=$id;
            $arr[$i][time]=$time;
        }
        $myjson=json_encode($arr);
 

aminsm

New Member
بله روشتون درسته.

من یکم کوتاهترش رو براتون میگم :
PHP:
$arr = array();
while( $arr[] = mysql_fetch_array($result) ){}
$myjson=json_encode($arr);
 

i-php-i

Active Member
من یکم کوتاهترش رو براتون میگم :
همنطور که می دونید توی جی سان براکتهای [] معرف آرایه هست ولی json_encode این براکتها رو به رشته تولیدی خودش اعمال نمی کنه و در نتیجه یه شی تولید می شه.

وقتی این شی رو برای کلاینت می فرستیم، توابعی مثل length دیگه روی شی عمل نمی کنن.

توی کلاینت چطور باید طول ارایه چند بعدی رو بدست آورد؟ یا چطور باید به یکی از فیلدهای آرایه دسترسی پیدا کرد ؟
 

aminsm

New Member
همنطور که می دونید توی جی سان براکتهای [] معرف آرایه هست ولی json_encode این براکتها رو به رشته تولیدی خودش اعمال نمی کنه و در نتیجه یه شی تولید می شه.

وقتی این شی رو برای کلاینت می فرستیم، توابعی مثل length دیگه روی شی عمل نمی کنن.

توی کلاینت چطور باید طول ارایه چند بعدی رو بدست آورد؟ یا چطور باید به یکی از فیلدهای آرایه دسترسی پیدا کرد ؟

نه دوست عزیز، براکت همون کاری رو میکنه که شما با $i انجام میدادید.

شی تولید نمیشه و آرایه چند بعدی با اندیس شروع از 0 تا تعداد رکورد منهای 1، تولید میشه.

شما اصلا این کد رو تست کردید ببینید چی تولید میکنه؟

یه print_r از متغیر arr بگیرید متوجه میشین.
 

i-php-i

Active Member
شما اصلا این کد رو تست کردید ببینید چی تولید میکنه؟
با فایرباگ خروجی رو تست کردم.
شی تولید نمیشه و آرایه چند بعدی با اندیس شروع از 0 تا تعداد رکورد منهای 1، تولید میشه.
رشته تولیدی به همین شکل هست ولی چرا توی کلاینت کد زیر طول آرایه چند بعدی رو نمایش نمی ده و بجای طول آرایه undefined نمایش می ده؟
کد:
var myObject = eval("(" + ServerResponse + ")");
    alert(myObject.length);
لطفا توجه کنید که کدها به خوبی اجرا می شن و فایرباگ رشته خروجی رو نمایش می ده ولی نمی شه طول آرایه چند بعدی رو بدست آورد.
 

aminsm

New Member
با فایرباگ خروجی رو تست کردم.

رشته تولیدی به همین شکل هست ولی چرا توی کلاینت کد زیر طول آرایه چند بعدی رو نمایش نمی ده و بجای طول آرایه undefined نمایش می ده؟
کد:
var myObject = eval("(" + ServerResponse + ")");
    alert(myObject.length);
لطفا توجه کنید که کدها به خوبی اجرا می شن و فایرباگ رشته خروجی رو نمایش می ده ولی نمی شه طول آرایه چند بعدی رو بدست آورد.

دلیل اینکه undefined میده این هست که eval آرایه تولید نمیکنه و خروجی اون object هست،

من با jquery کار کردم که اونجا با parseJSON خروجی آرایه تولید میشه.

اینجا تعداد رو میتونی با کد زیر بدست بیاری، البته تست نکردم شما زحمتش رو بکشید:
HTML:
var count = 0;
  for (var i in obj) {
    count++
 

ziXet

مدیر انجمن PHP/MYSQL
باید به تابع eval پاس کنیدش یا تو مرورگرهای جدید از JSON.parse استفاده کنید
 

جدیدترین ارسال ها

بالا