用數組存儲數據
PHP將數組存入資料庫中的四種方式
最近突然遇到了一個問題,如何用PHP將數組存入到資料庫中,經過自己的多方查找和研究,總結了以下四種方法:
1.implode()和explode()方式
2.print_r()和自定義函數方式
3.serialize()和unserialize()方式
4.json_encode()和json_decode()方式
⑵ 數組的存儲結構採用什麼存儲方式
順序存儲方式。
數組就是在內存中開辟一塊連續的、大小相同的空間,用來存儲數據。
連續:內存地址是連續的。如a是首地址,a+1就是第二個數據元素的地址,a+2是第三個。
大小相同:指每個數組元素所佔的空間大小是相同的。((a+i)-(a+i-1)=定值 是多少?)
如: int a[]={1,2,3,4};
示例:
a a+1 a+2 a+3
1 2 3 4
a[0] a[1] a[2] a[3]
注意:數組名不能被賦值,因為它是個常量值。代表數組的首地址。
⑶ 怎麼用數組存儲一個大數
用數組存儲大數可以通過malloc函數來實現。具體代碼如下:
int n;
scanf("%d",&n);
int *a=(int*)malloc(n*sizeof(int));
malloc的參數是分配空間的大小,n*sizeof(int)表示分配n個整型的空間,因為malloc返回的首地址,但是類型是void型,所以強制轉換成int型。
malloc是用於動態分配的,可以在你需要的時候進行分配,在實際應用中,可以根據需要轉換成你所需要的類型。
⑷ C語言用數組存儲大型數據的演算法
/*
size_a,pa——指向數組a的有效末端
ma——a的最大容量,必須大於na
n=12——求n的階
p——求階乘時的當前乘數
*/
#include
#define
Ma
10000
int
pa;/*指向數組a的有效末端*/
int
p=2;
int
memory_over=0;
union
data
{
unsigned
long
int
b;
struct
{unsigned
l:16;
unsigned
h:16;
}m;
}a[Ma];
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明1:考慮到result比較長,我用a[Ma].b來存儲n!的result,每一位a[pa].b能存儲4位10進制數字。
因為我定義的數組是靜態的,所以Ma應該足夠大。
ps:其實只用定義一個unsigned
long
int
b[Ma];就可以了(直接用b[pa]代替a[pa].b),但是我考慮到可能會訪問每一結點b[pa]的高16位(a[pa].m.h)和低16位(a[pa].m.l),但是的我考慮是多餘的!!不用像我這樣定義這么復雜的共用體!!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
unsigned
int
cashe;
unsigned
int
carry;
void
main()
{
unsigned
int
n;/*求n的階*/
void
facto(unsigned
int
n);
printf("Input
n:");
scanf("%u",&n);
/*=================開始求階乘!=============*/
a[0].b=1;/*初始化*/
facto(n);
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明2:上面這句直接調用facto(n)來求n!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*========================以下是顯示最後結果====================================*/
if(memory_over==0)
{printf("the
result
include
%dNO:\n",pa+1);
printf("%u",a[pa--].m.l);
for(;pa>=0;pa--)
printf("%04u",a[pa].m.l);
printf("\n");
}
getch();
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明2:求階函數facto(n)說明:
這個函數會不斷地調用multiple(),它的作用是每被調用一次就使得a[pa].b與階數p相乘一次,直到乘完n為止!
{multiple();
p++;/*每一輪乘一個階數p*/
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void
facto(unsigned
int
n)
{void
multiple();
pa=0;
while(pa<Ma-1&&p<=n)/*容量限制*/
{multiple();
p++;/*每一輪乘一個階數p*/
}
if(p<=n)
{printf("memory
out!\n");memory_over=1;}/*如果當前的存儲結果的數組a[Ma]不夠用!應提高Ma*/
}
/*==============================================================================
演算法說明3:乘法函數multiple()說明:負責a[pa].b與階數p相乘。
a[pa].b有很多結點,a[0].b、a[1].b、a[2].b、a[3].b、a[4].b、。。。
當然是從低結點a[0].b開始不斷與p相乘,產生的「進位」加到高位a[1].b,直到a[pa].b*p為止!
隨著結果數值增大,pa個結點的a[].b可能容納不下結果,所以如果a[pa].b與p相乘後還有「進位」carry,就擴大pa,並把carry放入到新增加的結點:
if(carry>0)
a[++pa].b=carry;
===================================================================================*/
void
multiple()
{int
i=0;
carry=0;
while(i<=pa)/*i指向當前處理的元素a[i],每一輪用一個位與階數p相乘*/
{a[i].b=a[i].b*p+carry;/*計算結果,要考慮來自低位的進位*/
carry=a[i].b/10000;/*計算進位*/
a[i].b=a[i].b%10000;/*計算余數*/
i++;
}
if(carry>0)
a[++pa].b=carry;
}
⑸ 51單片機如何用數組儲存輸入的數字,求程序
0-999999,最多有6位數,因此可聲明一個6byte的數組keybuffer[6]和一個存儲數字位數的變數bitnumunsignedcharkeybuffer[6];unsignedcharbitnum=0;if(key<10){keybuffer[bitnum]=key;bitnum++;}//如果用數碼管顯示,直接把keybuffer的值送顯就可以了//如果還需把值算出的話unsignedlongvalue=0,temp=1;unsignedchari;for(i=0;i
⑹ 數組的存儲方式是什麼
數組就是在內存中開辟一塊連續的、大小相同的空間,用來存儲數據。
連續:內存地址是連續的。如a是首地址,a+1就是第二個數據元素的地址,a+2是第三個。。。
大小相同:指每個數組元素所佔的空間大小是相同的。((a+i)-(a+i-1)=定值 是多少?)
如: int a[]={1,2,3,4};
示例:
a a+1 a+2 a+3
1 2 3 4
a[0] a[1] a[2] a[3]
注意:數組名不能被賦值,因為它是個常量值。代表數組的首地址。
⑺ 數組底層如何存儲數據
sizeof 操作符是在編譯時確定的,比如
int a[5];
sizeof(a);
在求 sizeof(a) 的值時發生在編譯代碼階段,不是在運行階段。
這也就是為什麼 可以這樣定義而不出錯
int b[sizeof(a)] = {0};
編譯器編譯代碼時,它一定知道這個 a 是什麼類型的,這個數組 a 有多大的,所以就基本數據類型來說,數組沒有存儲額外的信息, sizeof 是在編譯時確定的。
不過, C++ 自定義類型不一樣, C++對象數組確實存儲了額外的信息, 對於C++對象數組來說,
數組 至少存儲了 析構函數信息,但是這個信息對程序員來說是不可見的,詳細的請看 侯捷翻譯的 深度探索C++面向對象模型 250 頁。
⑻ 為什麼用數組可以存儲超過計算機數據范圍要求的數字
數組相當於把一個很大的數按一定數位拆分為若干個部分數字
如這個數字假如用整型變數是表示不了的
但你可以用整型數組把這個數每5位拆分開,如12345,67890,12345,67890,12345,67890這樣我們用6個整型數組元素就可以保存。但計算時就要進行技術上的處理。建議你看一下高精度運算方面的資料。