本文目录一览:
- 1、php删除数组指定元素并重建索引
- 2、PHP重置索引
- 3、php二维数组处理,并重置索引。。
- 4、php+mysql如何建立索引?怎么样运用?
- 5、php中数组的分类有哪两种?
- 6、coreseek3.2 php 怎样更新索引
php删除数组指定元素并重建索引
mongodb中使用aggregate可以返回数组字段数组的指定索引的元素
参考语句:
{$match:{'duid':15}},
{$project:{duid:1,"default":1}},
{$unwind:"$default.styles"},
{$match:{'default.styles.status':1}},
{$group:{_id:"$_id","defaults":{$push:"$default.styles"}}}
解释:
1:过滤数据{$match:{'duid':15}}
2:获取想要的列{$project:{duid:1,"default":1}}
3:获取展开后数组字段{$unwind:"$default.styles"}
4:条件查询数组元素{$match:{'default.styles.status':1}}
5:分组后保存结果{$group:{_id:"$_id","defaults":{$push:"$default.styles"}}}
PHP重置索引
为什么$array = array_values($array);后再打印出来的索引就是从0开始的
array_values()不是获取数组的值吗 跟重置索引有什么关系
===================
是获取数组的值,而且抛弃原数组的索引,重建一个数组.所以相当于重置索引.
php二维数组处理,并重置索引。。
直接用 array_flip 或者 array_unique 是不行的,你这没有键名,必须要自己写函数
?php
function unique_arr($array2D,$stkeep=false,$ndformat=true)
{
// 判断是否保留一级数组键 (一级数组键可以为非数字)
if($stkeep) $stArr = array_keys($array2D);
// 判断是否保留二级数组键 (所有二级数组键必须相同)
if($ndformat) $ndArr = array_keys(end($array2D));
//降维,也可以用implode,将一维数组转换为用逗号连接的字符串
foreach ($array2D as $v){
$v = join(",",$v);
$temp[] = $v;
}
//去掉重复的字符串,也就是重复的一维数组
$temp = array_unique($temp);
//再将拆开的数组重新组装
foreach ($temp as $k = $v)
{
if($stkeep) $k = $stArr[$k];
if($ndformat)
{
$tempArr = explode(",",$v);
foreach($tempArr as $ndkey = $ndval) $output[$k][$ndArr[$ndkey]] = $ndval;
}
else $output[$k] = explode(",",$v);
}
return $output;
}
$arr = array(
0 = array
(
0 = 1,
1 = 2
),
1 = array
(
0 = 1,
1 = 2
),
2 = array
(
0 = 2,
1 = 3
),
3 = array
(
0 = 2,
1 = 3
),
4 = array
(
0 = 3,
1 = 4
),
5 = array
(
0 = 3,
1 = 4
),
);
var_dump( array_values(unique_arr( $arr )) );
去重函数可参考:
.
php+mysql如何建立索引?怎么样运用?
1:较频繁作为查询、排序、分组和联合操作的字段创建索引。
2:唯一性太差的字段不宜使用索引。
3:使用唯一索引。
4:使用短索引(若对字符串索引,尽量指定一个前缀长度)。
5:利用左前缀(复合索引可以起几个索引的作用,可利用索引最左边的列集来匹配行,称左前缀)
6:不要过度索引(每个索引会占用额外的磁盘空间,并降低写操作的能力,修改数据索引也跟着更新)
7:更新非常频繁的字段不宜创建索引。
8:不会出现在where字句中的字段无需索引。
php中数组的分类有哪两种?
1、索引数组
有两种创建索引数组的方法:
索引是自动分配的(索引从 0 开始):
$cars=array("porsche","BMW","Volvo");
2、关联数组
关联数组是使用您分配给数组的指定键的数组。
有两种创建关联数组的方法:
$age=array("Bill"="35","Steve"="37","Elon"="43");
扩展资料
实用函数——
有相当多的实用函数作用于数组,参见数组函数一节。
注: unset() 函数允许取消一个数组中的键名。要注意数组将不会重建索引。
?php
$a = array( 1 = 'one', 2 = 'two', 3 = 'three' );
unset( $a[2] );
/* 将产生一个数组,定义为
$a = array( 1='one', 3='three');
而不是
$a = array( 1 = 'one', 2 = 'three');
*/
$b = array_values($a);
// Now $b is array(0 = 'one', 1 ='three')
?
foreach 控制结构是专门用于数组的。它提供了一个简单的方法来遍历数组。
coreseek3.2 php 怎样更新索引
php是无法更新 coreseek 的索引的,需要使用coreseek的语法,配合定时任务来自动更新索引。
这个写起来很麻烦,我们的系统正好用了 coreseek ,说一下我的思路吧。
1、首先建立一个 search 表,这个表用来存你要进行搜索的、经过分词的数据,分词系统你们自己选,我使用的是php的pscws4中文分词。
DROP TABLE IF EXISTS `search`;
CREATE TABLE `search` (
`searchid` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`content` text NOT NULL,
`add_time` int(11) NOT NULL,
PRIMARY KEY (`searchid`)
) ENGINE=MyISAM AUTO_INCREMENT=15209 DEFAULT CHARSET=utf8;
2、还需要一个 索引计数表 search_counter,这个表用来存放每次索引更新后的最大一个ID,下次更新索引的时候,就不需要从头更新了,只需要比这个ID大的就可以。
DROP TABLE IF EXISTS `search_counter`;
CREATE TABLE `search_counter` (
`counter_id` int(11) NOT NULL,
`max_doc_id` int(11) NOT NULL,
PRIMARY KEY (`counter_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3、配置 coreseek ,以下是我在windows下 coreseek的配置文件,linux 在服务器上,没去找。这里配置了2个索引源,一个是main,一个是增量索引delta,这样不需要每次重建所有索引,只需要合并 main和delta就可以了。
#源定义
source main
{
type = mysql
sql_host = 192.168.0.10
sql_user = root
sql_pass = root
sql_db = database
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query_pre = REPLACE INTO search_counter SELECT 1, MAX(searchid) FROM qhb_search
sql_query = SELECT searchid, title, content, controller_id, controller,add_time FROM search
#sql_query第一列id需为整数
#title、content作为字符串/文本字段,被全文索引
#sql_attr_uint = searchid #从SQL读取到的值必须为整数
sql_attr_uint = controller_id # 数据库ID过滤
sql_attr_uint = controller # 控制器过滤
sql_attr_timestamp = add_time #从SQL读取到的值必须为整数,作为时间属性
sql_query_info_pre = SET NAMES utf8 #命令行查询时,设置正确的字符集
#sql_query_info = SELECT * FROM qhb_search WHERE searchid=$searchid #命令行查询时,从数据库读取原始数据信息
}
source delta : main
{
sql_query_pre = SET NAMES utf8
sql_query = SELECT searchid, title, content, controller_id, controller,add_time FROM qhb_search WHERE searchid( SELECT max_doc_id FROM qhb_search_counter WHERE counter_id=1 )
sql_query_post = REPLACE INTO qhb_search_counter SELECT 1, MAX(searchid) FROM qhb_search
}
#index定义
index main
{
source = main #对应的source名称
path = D:/WebSoft/coreseek/var/data/main #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0
#中文分词配置,详情请查看:
#charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
charset_dictpath = D:/WebSoft/coreseek/etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
charset_type = zh_cn.utf-8
}
index delta : main
{
source = delta
path = D:/WebSoft/coreseek/var/data/delta
}
#全局index定义
indexer
{
mem_limit = 128M
}
#searchd服务定义
searchd
{
listen = 9312
read_timeout = 5
max_children = 30
max_matches = 1000
seamless_rotate = 0
preopen_indexes = 0
unlink_old = 1
pid_file = D:/WebSoft/coreseek/var/log/searchd_main.pid #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
log = D:/WebSoft/coreseek/var/log/searchd_main.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
query_log = D:/WebSoft/coreseek/var/log/query_main.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
}
4、建立索引。必须要先建立索引, coreseek 才能启动。下面是我在Windows的建立索引命令,如何使用命令行我就不赘述了。
D:\WebSoft\coreseek\bin\indexer --all --config d:\WebSoft\coreseek\bin\sphinx.conf
5、配置并启动服务
D:\WebSoft\coreseek\bin\searchd --install --config
D:\WebSoft\coreseek\bin\sphinx.conf --servicename coreseek
6、Windows创建定时任务,每分钟更新一次索引
D:\WebSoft\coreseek\bin\indexer.exe --config D:\WebSoft\coreseek\bin\sphinx.conf delta --rotate
echo indexing, window will close when complete
7、Windows创建定时任务,每天凌晨2点合并索引
D:\WebSoft\coreseek\bin\indexer.exe --config D:\WebSoft\coreseek\bin\sphinx.conf --merge main delta --rotate
echo indexing, window will close when complete
8、附上 创建索引,重建索引,合并索引在windows及linux上的方法,以及一些使用上的小问题
windows:
建立索引
D:\WebSoft\coreseek\bin\indexer --all --config d:\WebSoft\coreseek\bin\sphinx.conf
重建索引
D:\WebSoft\coreseek\bin\indexer --config D:\WebSoft\coreseek\bin\sphinx.conf main --rotate
增量索引
D:\WebSoft\coreseek\bin\indexer --config D:\WebSoft\coreseek\bin\sphinx.conf delta --rotate
合并索引
D:\WebSoft\coreseek\bin\indexer --config D:\WebSoft\coreseek\bin\sphinx.conf --merge main delta --rotate
配置并启动服务
D:\WebSoft\coreseek\bin\searchd --install --config D:\WebSoft\coreseek\bin\sphinx.conf --servicename coreseek
创建自定义词库方法:
1、先去 搜狗细胞词库下载需要的词库
2、使用 深蓝词库转换 将词库转换为 txt
3、使用PHP程序将 生成的txt转换为 coreseek 所需要的格式
4、附加到 unigram.txt
5、使用命令更新分词词库
cmd 进入 bin目录,执行下面命令
mmseg -u D:\WebSoft\coreseek\etc\unigram.txt
6、将生成的 unigram.txt.uni 改名为:uni.lib
7、重建索引
8、重启coreseek服务
注意:
必须先建立索引,服务才能启动
1、coreseek索引或者查询时提示ERROR: invalid token in etc解决办法
该提示表示当前的配置文件的编码不是UTF-8(无BOM头)格式,无法正确解析,请使用编辑软件打开配置文件,另存为UTF-8(无BOM头)格式;
2、failed to lock .....try --rotate
索引已经建立,使用重建索引命令
3、报警告:failed to scanf pid from
没有启动coreseek服务
4、过滤搜索结果,必须使用数组传递,只支持
无符号整数(1-32位宽);
UNIX 时间戳(timestamps);
浮点值(32位,IEEE 754单精度);
字符串序列 (尤其是计算出的整数值);
多值属性 MVA( multi-value attributes ) (32位无符号整型值的变长序列)
$this-shpinx-SetFilter('controller', array(1,2) );
CENTOS 操作方法
开机启动coreseek搜索服务:
vi /etc/rc.d/rc.local
在最后一行添加
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/bin/sphinx.conf
##如要停止搜索服务,请使用/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/bin/sphinx.conf --stop
##如要已启动服务,要更新索引,请使用/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/bin/sphinx.conf --all --rotate
linux下编辑定时任务 crontab -e
#凌晨4点合并索引,其余时间每分钟更新索引
* 0-3 * * * /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf delta --rotate
* 6-23 * * * /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf delta --rotate
0 4 * * * /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf --merge main delta --rotate
启动服务:
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/bin/sphinx.conf
建立索引
/usr/local/coreseek/bin/indexer --all --config /usr/local/coreseek/bin/sphinx.conf
重建索引
/usr/local/coreseek/bin/indexer --config /usr/local/coreseek/bin/sphinx.conf main --rotate
增量索引
/usr/local/coreseek/bin/indexer --config /usr/local/coreseek/bin/sphinx.conf delta --rotate
合并索引
/usr/local/coreseek/bin/indexer --config /usr/local/coreseek/bin/sphinx.conf --merge main delta --rotate