寻求最优的计算方法 本帖最后由 edisonli 于 2012-09-06 11:35:14 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <?php$arr1=array( array( 'id'=>1, 'pos'=>1 ), array( 'id'=>2, 'pos'=>2 ), array( 'id'=>3, 'pos'=>3 ), array( 'id'=>4, 'pos'=>4 ), array( 'id'=>5, 'pos'=>5 ), array( 'id'=>6, 'pos'=>6 ),);$arr2=array( 'id'=>7, 'pos'=>4);function array_insert($arr1, $arr2){ $index = 1; $insert = false; foreach($arr1 as $v) { if ($v['pos'] == $arr2['pos']) { if ($v['id'] < $arr2['id']) { array_splice($arr1, $index - 1, 0, array($arr2)); break; } else { $insert = true; } } else if ($insert) { break; } $index ++; } if ($insert) { array_splice($arr1, $index - 1, 0, array($arr2)); } return $arr1;}$arr1 = array_insert($arr1, $arr2);print_r($arr1);$arr2=array( 'id'=>3, 'pos'=>4);$arr1 = array_insert($arr1, $arr2);print_r($arr1);$arr2=array( 'id'=>5, 'pos'=>6);$arr1 = array_insert($arr1, $arr2);print_r($arr1);?> 看来还是得掌握php的函数啊,array_splice这个都没用过,哎~ 当$arr1=array( array( 'id'=>1, 'pos'=>1 ), array( 'id'=>2, 'pos'=>2 ), array( 'id'=>3, 'pos'=>3 ), array( 'id'=>4, 'pos'=>5 ), array( 'id'=>5, 'pos'=>5 ), array( 'id'=>6, 'pos'=>6 ),);$arr2=array( 'id'=>7, 'pos'=>4);时$arr1 = array_insert($arr1, $arr2);print_r($arr1);得到Array( [0] => Array ( [id] => 1 [pos] => 1 ) [1] => Array ( [id] => 2 [pos] => 2 ) [2] => Array ( [id] => 3 [pos] => 3 ) [3] => Array ( [id] => 4 [pos] => 5 ) [4] => Array ( [id] => 5 [pos] => 5 ) [5] => Array ( [id] => 6 [pos] => 6 ))插不进去哟 $arrays = array_chunk($arr1, 1); $result = array(array()); $merge = array($arr2); foreach ($arrays as $array) { for($i = 0; $i < count($array); $i++) { if (($array[$i]['pos'] < $arr2['pos']) || ($array[$i]['pos'] > $arr2['pos'])) { $result = array_merge($result, $array); }elseif ($array[$i]['id'] < $arr2['id']) { $result = array_merge($result, $merge); $result = array_merge($result, $array); } else { $result = array_merge($result, $array); $result = array_merge($result, $merge); } } } $result = array_slice($result, 1); 矩阵数组交换一下行列的key值,用起来就很方便,而且其他情况例如求和都很有用,要善用这办法交换后arr结构为 array([id][整数],[pos][整数])这样的结构用array[pos]和arr2用“值”求交集(保留对应键),得到 arr3用array[id]和arr3用“整数键”求交集,得到arr4合并arr3和arr4,再排序就是你想要的了操作过程中注意不要干扰整数key的顺序就行代码略 初学,求教正则表达式 html无法嵌套php代码来输出session值?? 刚接触php,死马当活马医,公司非要我用php,只好弄个程序改,遇到第一个问题 apache+php cgi问题 可以做到让别人看不到这样的东西么? 求助:更新年月日的函数怎么写? 我是个PHP刚开始接触者,找同道中人一起学习 session能注册到变量,但到不到值! 怎样检查文件大小是否在php.ini中设置允许范围之内? 请问php怎样调用sp,还有就是mysql支持sp吗? 关于转义函数 get_magic_quotes_gpc 说不清楚,内详。 php如何输出 敲入的空格符而不是输出
$arr1=array(
array(
'id'=>1,
'pos'=>1
),
array(
'id'=>2,
'pos'=>2
),
array(
'id'=>3,
'pos'=>3
),
array(
'id'=>4,
'pos'=>4
),
array(
'id'=>5,
'pos'=>5
),
array(
'id'=>6,
'pos'=>6
),
);$arr2=array(
'id'=>7,
'pos'=>4
);function array_insert($arr1, $arr2)
{
$index = 1;
$insert = false;
foreach($arr1 as $v)
{
if ($v['pos'] == $arr2['pos']) {
if ($v['id'] < $arr2['id']) {
array_splice($arr1, $index - 1, 0, array($arr2));
break;
} else {
$insert = true;
}
} else if ($insert) {
break;
}
$index ++;
}
if ($insert) {
array_splice($arr1, $index - 1, 0, array($arr2));
}
return $arr1;
}
$arr1 = array_insert($arr1, $arr2);
print_r($arr1);$arr2=array(
'id'=>3,
'pos'=>4
);
$arr1 = array_insert($arr1, $arr2);
print_r($arr1);$arr2=array(
'id'=>5,
'pos'=>6
);
$arr1 = array_insert($arr1, $arr2);
print_r($arr1);
?>
array(
'id'=>1,
'pos'=>1
),
array(
'id'=>2,
'pos'=>2
),
array(
'id'=>3,
'pos'=>3
),
array(
'id'=>4,
'pos'=>5
),
array(
'id'=>5,
'pos'=>5
),
array(
'id'=>6,
'pos'=>6
),
);$arr2=array(
'id'=>7,
'pos'=>4
);时$arr1 = array_insert($arr1, $arr2);
print_r($arr1);
得到Array
(
[0] => Array
(
[id] => 1
[pos] => 1
) [1] => Array
(
[id] => 2
[pos] => 2
) [2] => Array
(
[id] => 3
[pos] => 3
) [3] => Array
(
[id] => 4
[pos] => 5
) [4] => Array
(
[id] => 5
[pos] => 5
) [5] => Array
(
[id] => 6
[pos] => 6
))插不进去哟
$result = array(array());
$merge = array($arr2);
foreach ($arrays as $array) {
for($i = 0; $i < count($array); $i++) {
if (($array[$i]['pos'] < $arr2['pos']) || ($array[$i]['pos'] > $arr2['pos'])) {
$result = array_merge($result, $array);
}elseif ($array[$i]['id'] < $arr2['id']) {
$result = array_merge($result, $merge);
$result = array_merge($result, $array);
} else {
$result = array_merge($result, $array);
$result = array_merge($result, $merge);
}
}
}
$result = array_slice($result, 1);
用array[id]和arr3用“整数键”求交集,得到arr4合并arr3和arr4,再排序就是你想要的了操作过程中注意不要干扰整数key的顺序就行
代码略