我需要帮助写PHP脚本这种种数据成某种格式的逻辑...分组相似的记录与PHP
首先脚本需要遍历每个S1值和平安端点得到毫升值(更像),实际上是引用其他s1记录。这是简单的部分!数据是这样返回的;
Table 1
s1 | ml
----------
1 | -
2 | 3,4
3 | 2,8,9
4 | -
5 | 2
6 | 1
7 | 10
8 | -
9 | -
10 | -
条件1:正如你所看到的S1值,告诉它其他S1记录类似于其他的端点返回数据,但M1的方向并不总是双向的。有时候,就像当s1 = 6时ml的值是1但是当s1 = 1时没有ml值。这个脚本需要意识到已经存在一个可以解释ml记录的上下文,其中s1 = 5(上面),其中s1 = 2 + rec = 5(下面) s1记录它的价值,它应该被添加在那里。注意s1 = 2时,ml = 3时如何存储,但当s1 = 3时,ml = 2,因为我们有反向记录,所以忽略它。
我基本上想要将所有数据匹配到1个排序'配置文件',所以它最终以下面的格式,我将存储在'排序'记录的另一个数据库表。
Table 2
s1 | rec
----------
2 | 3
2 | 4
2 | 8
2 | 9
2 | 9
2 | 5
6 | 1
7 | 10
这已经绞尽脑汁了几天,现在,我需要的东西,这就是有效的,因为最终它会处理数百万条记录,我敢肯定有一个简单的解决方案,但我只是想不出如何启动它。
我尝试了以下,但我卡住了,不知道如何走得更远;
public function getrelated($id='', $t=''){
if($id != ""){
$get = Easytest::where('s1','=',$id)->get();
if(count($get) > 0){
$ret= array();
foreach($get as $go){
$v = explode(",", $go->s2);
foreach ($v as $e) {
if($e != $t){
$ret[$e] = $this->getrelated($e, $id);
}
}
}
if(count($ret) > 0){
return $ret;
}else{
return "";
}
}else{
return $id;
}
}else{
return "";
}
}
public function easytest(){
ob_start();
$a = array(
array("s1"=>1,"s2"=>implode(",",array()).""),
array("s1"=>2,"s2"=>implode(",",array(3,4)).","),
array("s1"=>3,"s2"=>implode(",",array(2,8,9)).","),
array("s1"=>4,"s2"=>implode(",",array()).""),
array("s1"=>5,"s2"=>implode(",",array(2)).","),
array("s1"=>6,"s2"=>implode(",",array(1)).","),
array("s1"=>7,"s2"=>implode(",",array(10)).","),
array("s1"=>8,"s2"=>implode(",",array()).""),
array("s1"=>9,"s2"=>implode(",",array()).""),
array("s1"=>10,"s2"=>implode(",",array()).""),
array("s1"=>11,"s2"=>implode(",",array(12)).","),
array("s1"=>12,"s2"=>implode(",",array(2)).",")
);
//return Easytest::insert($a);
$records = Easytest::all();
foreach ($records as $record) {
$id = $record->s1;
echo "ROW: ".$id." > ";
$record->s2 = ltrim($record->s2,",");
$ml = explode(",",$record->s2);
if(count($ml) >= 1){
foreach ($ml as $t) {
echo "RESULT: ".$t." -".print_r($this->getrelated($t, $id), true);
echo ",\n";
}
}
echo " <br><br>\n\n";
}
return ob_get_clean();
}
所以我走了这么远 - 现在我需要做的排序和我真正卡住了。 eeeek – Andrew 2015-01-21 17:21:04