php中怎样向关联数组的指定位置插入另一个数组的元素?
3个回答
展开全部
这个功能需求来自于网站运营策略,举倒子:
在一个排行列表中,默认有以下元素,顺序有一定的依据,假设是按下载次数排列。
$rows = array(
array('name'=>'QQ2010'),
array('name'=>'QQ2009'),
array('name'=>'迅雷5'),
array('name'=>'飞信2010'),
array('name'=>'Kugoo2010'),
array('name'=>'TTplayer'),
array('name'=>'Firefox4.0'),
array('name'=>'美图秀秀'),
array('name'=>'360safe'),
array('name'=>'Chrome6')
);
如果有一个客户[可牛杀毒]想买花10元/元下我们第二个位置,可以大家想,直接把QQ2009替换掉不就完事了吗。不,那样的话用户体验并不好,明明QQ2009是一个下载次数比较多的软件,为什么在列表中却没有了呢。
其实我们真正的需求是把QQ2009以下的单元都往后推,腾出第二个位置来给[可牛杀毒]。如果页面中只能显示10个单元,那倒霉的就是[Chrome6]了,谁叫他们付费买我们的位置呢,呵呵。
再说到程序原理上来吧,PHP要实现这个需求,挺简单,用数组函数array_splice就可以了,具体用法参照PHP手册。
给一个完整的例子吧:
<?php
$rows = array(
array('name'=>'QQ2010',),
array('name'=>'QQ2009',),
array('name'=>'迅雷5',),
array('name'=>'飞信2010',),
array('name'=>'Kugoo2010',),
array('name'=>'TTplayer',),
array('name'=>'Firefox4.0',),
array('name'=>'美图秀秀',),
array('name'=>'360safe',),
array('name'=>'Chrome6',),
);
$pop = array(
'2'=>array('name'=>'可牛杀毒'),
'5'=>array('name'=>'金山词霸2010'),
);
foreach($pop as $key=>$p){
array_splice($rows, $key-1, 0, array($p));
}
var_dump($rows);
?>
最近的结果是:
array(12) {
[0]=>
array(1) {
["name"]=>
string(6) "QQ2010"
}
[1]=>
array(1) {
["name"]=>
string(8) "可牛杀毒"
}
[2]=>
array(1) {
["name"]=>
string(6) "QQ2009"
}
[3]=>
array(1) {
["name"]=>
string(5) "迅雷5"
}
[4]=>
array(1) {
["name"]=>
string(12) "金山词霸2010"
}
[5]=>
array(1) {
["name"]=>
string(8) "飞信2010"
}
[6]=>
array(1) {
["name"]=>
string(9) "Kugoo2010"
}
[7]=>
array(1) {
["name"]=>
string(8) "TTplayer"
}
[8]=>
array(1) {
["name"]=>
string(10) "Firefox4.0"
}
[9]=>
array(1) {
["name"]=>
string(8) "美图秀秀"
}
[10]=>
array(1) {
["name"]=>
string(7) "360safe"
}
[11]=>
array(1) {
["name"]=>
string(7) "Chrome6"
}
}
在一个排行列表中,默认有以下元素,顺序有一定的依据,假设是按下载次数排列。
$rows = array(
array('name'=>'QQ2010'),
array('name'=>'QQ2009'),
array('name'=>'迅雷5'),
array('name'=>'飞信2010'),
array('name'=>'Kugoo2010'),
array('name'=>'TTplayer'),
array('name'=>'Firefox4.0'),
array('name'=>'美图秀秀'),
array('name'=>'360safe'),
array('name'=>'Chrome6')
);
如果有一个客户[可牛杀毒]想买花10元/元下我们第二个位置,可以大家想,直接把QQ2009替换掉不就完事了吗。不,那样的话用户体验并不好,明明QQ2009是一个下载次数比较多的软件,为什么在列表中却没有了呢。
其实我们真正的需求是把QQ2009以下的单元都往后推,腾出第二个位置来给[可牛杀毒]。如果页面中只能显示10个单元,那倒霉的就是[Chrome6]了,谁叫他们付费买我们的位置呢,呵呵。
再说到程序原理上来吧,PHP要实现这个需求,挺简单,用数组函数array_splice就可以了,具体用法参照PHP手册。
给一个完整的例子吧:
<?php
$rows = array(
array('name'=>'QQ2010',),
array('name'=>'QQ2009',),
array('name'=>'迅雷5',),
array('name'=>'飞信2010',),
array('name'=>'Kugoo2010',),
array('name'=>'TTplayer',),
array('name'=>'Firefox4.0',),
array('name'=>'美图秀秀',),
array('name'=>'360safe',),
array('name'=>'Chrome6',),
);
$pop = array(
'2'=>array('name'=>'可牛杀毒'),
'5'=>array('name'=>'金山词霸2010'),
);
foreach($pop as $key=>$p){
array_splice($rows, $key-1, 0, array($p));
}
var_dump($rows);
?>
最近的结果是:
array(12) {
[0]=>
array(1) {
["name"]=>
string(6) "QQ2010"
}
[1]=>
array(1) {
["name"]=>
string(8) "可牛杀毒"
}
[2]=>
array(1) {
["name"]=>
string(6) "QQ2009"
}
[3]=>
array(1) {
["name"]=>
string(5) "迅雷5"
}
[4]=>
array(1) {
["name"]=>
string(12) "金山词霸2010"
}
[5]=>
array(1) {
["name"]=>
string(8) "飞信2010"
}
[6]=>
array(1) {
["name"]=>
string(9) "Kugoo2010"
}
[7]=>
array(1) {
["name"]=>
string(8) "TTplayer"
}
[8]=>
array(1) {
["name"]=>
string(10) "Firefox4.0"
}
[9]=>
array(1) {
["name"]=>
string(8) "美图秀秀"
}
[10]=>
array(1) {
["name"]=>
string(7) "360safe"
}
[11]=>
array(1) {
["name"]=>
string(7) "Chrome6"
}
}
展开全部
与PHP的正常赋值一样
比如:
<?php
//关联数组
$array = array('a'=>array('a1'),'b'=>array('b1'));
//另外一个数组
$array_other = array('c','d');
//把$array_other数组的第一元素插入到关联数组$array中
$array['a'][] = $array_other[0];
?>
其他的情况类似。
同时,php有一些赋值的函数,可以作为参考 array_push() 函数等
比如:
<?php
//关联数组
$array = array('a'=>array('a1'),'b'=>array('b1'));
//另外一个数组
$array_other = array('c','d');
//把$array_other数组的第一元素插入到关联数组$array中
$array['a'][] = $array_other[0];
?>
其他的情况类似。
同时,php有一些赋值的函数,可以作为参考 array_push() 函数等
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-04-29
展开全部
这个我也很想知道,每次都遍历好麻烦,总觉得有简单点的方法,求高人指点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询