我正在阅读一些数据并希望将其排序为数组。 更具体地说,即时阅读obj模型,我想将所有边排序成一个数组。然后,每个边元素应该存在使用该边的所有面的数组。因此,在排序之后,每个边缘应该具有使用它们的两个面中存在的2个条目。但是在实际排序之后,大多数边缘以相同的键和单个面作为条目出现两次。这里有一些更详细的含义:
我读到的第一张脸是
array(4) {
[0]=>
string(1) "f"
[1]=>
string(1) "1"
[2]=>
string(1) "2"
[3]=>
string(2) "3
将边缘1_2,2_3和1_3分类到此数组中(值是使用此边的面,面数0)
array(3) {
["1_2"]=>
array(1) {
[0]=>
int(0)
}
["2_3"]=>
array(1) {
[0]=>
int(0)
}
["1_3"]=>
array(1) {
[0]=>
int(0)
}
阅读第二张脸时
array(4) {
[0]=>
string(1) "f"
[1]=>
string(1) "1"
[2]=>
string(1) "3"
[3]=>
string(2) "4"
生成的边数组如下所示:
array(6) {
["1_2"]=>
array(1) {
[0]=>
int(0)
}
["2_3"]=>
array(1) {
[0]=>
int(0)
}
["1_3"]=>
array(1) {
[0]=>
int(0)
}
["1_3"]=>
array(1) {
[0]=>
int(1)
}
["3_4"]=>
array(1) {
[0]=>
int(1)
}
["1_4"]=>
array(1) {
[0]=>
int(1)
}
}
两个面都使用了边缘1_3,但是关键是" 1_3"在具有不同值的单个数组中出现两次?!我希望它看起来像这样
["1_3"]=>
array(2) {
[0]=>
int(0)
[0]=>
int(1)
}
我不知道为什么或如何发生这种情况,因为据我所知,密钥应该是唯一的。在给出元素" 1_3"然后我才收到最新的条目(int(1))。
完整的排序代码如下所示
if ($line_temp[0]=="f"){
for ($j=0;$j<3;$j++){
$line_temp2 = explode("//",$line_temp[$j+1]);
$data["f"][$face_number][$j] = $line_temp2[0];
}
if ($data["f"][$face_number][0]<$data["f"][$face_number][1]){
$data["e"][$data["f"][$face_number][0]."_".$data["f"][$face_number][1]][]=$face_number;
} else {
$data["e"][$data["f"][$face_number][1]."_".$data["f"][$face_number][0]][]=$face_number;
}
if ($data["f"][$face_number][1]<$data["f"][$face_number][2]){
$data["e"][$data["f"][$face_number][1]."_".$data["f"][$face_number][2]][]=$face_number;
} else {
$data["e"][$data["f"][$face_number][2]."_".$data["f"][$face_number][1]][]=$face_number;
}
if ($data["f"][$face_number][0]<$data["f"][$face_number][2]){
$data["e"][$data["f"][$face_number][0]."_".$data["f"][$face_number][2]][]=$face_number;
} else {
$data["e"][$data["f"][$face_number][2]."_".$data["f"][$face_number][0]][]=$face_number;
}
var_dump($data["e"]);
var_dump($data["e"]["1_3"]);
$face_number++;
}