真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

php處理集合數(shù)據(jù) phplist

如何利用php數(shù)組對百萬數(shù)據(jù)進(jìn)行排重

如果你已經(jīng)使用了一段時間PHP的話,那么,你應(yīng)該已經(jīng)對它的數(shù)組比較熟悉了——這種數(shù)據(jù)結(jié)構(gòu)允許你在單個變量中存儲多個值,并且可以把它們作為一個集合進(jìn)行操作。

創(chuàng)新互聯(lián)是一家專業(yè)提供掇刀企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站制作、網(wǎng)站設(shè)計、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為掇刀眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。

經(jīng)常,開發(fā)人員發(fā)現(xiàn)在PHP中使用這種數(shù)據(jù)結(jié)構(gòu)對值或者數(shù)組元素進(jìn)行排序非常有用。PHP提供了一些適合多種數(shù)組的排序函數(shù),這些函數(shù)允許你在數(shù)組內(nèi)部對元素進(jìn)行排列,也允許用很多不同的方法對它們進(jìn)行重新排序。在這篇文章中我們將討論該排序中最重要的幾個函數(shù)。

簡單排序

首先,讓我們來看看最簡單的情況:將一個數(shù)組元素從低到高進(jìn)行簡單排序,這個函數(shù)既可以按數(shù)字大小排列也可以按字母順序排列。PHP的sort()函數(shù)實(shí)現(xiàn)了這個功能,如Listing A所示:

Listing A

?php

? $data = array(5,8,1,7,2);

? sort($data);

? print_r($data);

? ?

輸出結(jié)果如下所示:

Array ([0] = 1

[1] = 2

[2] = 5

[3] = 7

[4] = 8

)

為什么我用php查詢mongodb數(shù)據(jù)庫中的某個集合中的文檔的條數(shù),得到的結(jié)果和實(shí)際情況不一致?

我也遇到過:

官方文檔解釋了這種現(xiàn)象的原因以及解決方法:

不準(zhǔn)確的原因:

操作的是分片的集合(前提);

shard分片正在做塊遷移,導(dǎo)致有重復(fù)數(shù)據(jù)出現(xiàn)

存在孤立文檔(因?yàn)椴徽jP(guān)機(jī)、塊遷移失敗等原因?qū)е拢?/p>

解決方法

使用聚合aggregate的方式查詢count數(shù)量,shell命令如下:

db.collection.aggregate(

[

{ $group: { _id: null, count: { $sum: 1 } } }

])

也可以直接將原數(shù)據(jù)導(dǎo)出,將表刪除后重新導(dǎo)入就可以了(我是這么處理的)

在PHP中怎么解決大量數(shù)據(jù)處理的問題

mysql_query函數(shù)查詢的方式是查詢出全部結(jié)果后緩存到內(nèi)存中,這樣就會出現(xiàn)超內(nèi)存的現(xiàn)象,使用另外一個函數(shù)mysql_unbuffered_query可以解決這個問題,mysql_unbuffered_query不會緩存結(jié)果集,而是查詢出來數(shù)據(jù)后立馬對結(jié)果集進(jìn)行操作,也就是便查詢邊返回,這樣就不會出現(xiàn)超出內(nèi)存的現(xiàn)象,但是使用mysql_unbuffered_query的是時候不能使用 mysql_num_rows() 和 mysql_data_seek()。并且向 MySQL 發(fā)送一條新的 SQL 查詢之前,必須提取掉所有未緩存的 SQL 查詢所產(chǎn)生的結(jié)果行。例如:

使用緩存結(jié)果集的代碼:

function selecttest()

{

try {

$pdo = new PDO("mysql:host=localhost;dbname=test", 'root', '123456');

// 不使用緩存結(jié)果集方式

// $pdo-setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);

$sth = $pdo-prepare('select * from test');

$sth-execute();

echo '最初占用內(nèi)存大?。? . memory_get_usage() . "\n";

$i = 0;

while ($result = $sth-fetch(PDO::FETCH_ASSOC)) {

$i += 1;

if ($i 10) {

break;

}

sleep(1);

print_r($result);

echo '占用內(nèi)存大?。? . memory_get_usage() . "\n";

}

} catch (Exception $e) {

echo $e-getMessage();

}

}

執(zhí)行時將會報超出內(nèi)存的錯誤:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 204800000 bytes) in E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php on line 56

Call Stack:

0.0005 135392 1. {main}() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:0

0.0005 135568 2. test-selecttest() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:85

0.0050 142528 3. PDOStatement-execute() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:56

將上面代碼中的$pdo-setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);一行的注釋去掉后將不在緩存結(jié)果集,這時運(yùn)行該函數(shù)的結(jié)果如下:

最初占用內(nèi)存大?。?44808

Array

(

[id] = 1

[a] = v

[b] = w

[c] = i

)

占用內(nèi)存大?。?45544

Array

(

[id] = 2

[a] = b

[b] = l

[c] = q

)

占用內(nèi)存大小:145544

Array

(

[id] = 3

[a] = m

[b] = p

[c] = h

)

占用內(nèi)存大?。?45536

Array

(

[id] = 4

[a] = j

[b] = i

[c] = b

)

占用內(nèi)存大小:145536

可以看到,這時返回一條數(shù)據(jù)內(nèi)存占用非常的小,也就700多字節(jié),這樣就不會出現(xiàn)超出內(nèi)存的錯誤了。

php/shell/mysql 解決排列組合問題, 從現(xiàn)有數(shù)據(jù)集合提取部分?jǐn)?shù)據(jù)并滿足以下條件。

假如名稱數(shù)量的數(shù)據(jù)是存在一個文件 file.dat 中的

使用shell語言可以這樣寫

./#awk rows=參數(shù)1 sum=參數(shù)2 file.dat

這樣就可以把所有的組合打印出來了,已經(jīng)過測試了

上面這句可以根據(jù)需要,寫shell函數(shù)包裝起來

#awk 代碼如下:

#!/bin/awk -f

BEGIN{}

{

a[$1]=$2;

}

END{

choose(rows,sum,a);

}

# i為所行數(shù)

# x為總和

# array為數(shù)組

function choose(i,x,array)

{

if(i==1){

for(one in array){

if(array[one]==(x-count[2]) rep[one]!=1){

if(temp[2]!="")

print "["temp[(i+1)]",""["one","array[one]"]]";

else

print "["one","array[one]"]";

}

}

}

else{

for(one in array){

count[i]=0;

if(array[one](x-count[i]) rep[one]!=1){

count[i]=count[i+1]+array[one];

rep[one]=1;

if(temp[i+1]!=""){

temp[i]=temp[i+1]",["one","array[one]"]";

}

else{

temp[i]="["one","array[one]"]";

}

choose((i-1),x,array);

}

}

}

}


新聞標(biāo)題:php處理集合數(shù)據(jù) phplist
轉(zhuǎn)載注明:http://weahome.cn/article/dopiphc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部