数组有两次相同的键(php)

时间:2016-01-25 16:08:00

标签: php arrays sorting key

我正在阅读一些数据并希望将其排序为数组。 更具体地说,即时阅读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++;
        }

0 个答案:

没有答案