lundi 11 novembre 2019

If statement has to check if the id is already used if yes add to it, if no make it. Makes multiple times same id

I am trying to make an array with forms linked to street names. To make sure the form is only once added to the array I loop thru it. Based on form id I either add id, name, percentage, and streets to the array $projectForms or only add the street if the id already exists in $projectForms.

The code:

$projectForms = [
        'projectName' => $projectName,
        'forms' => []
    ];

    foreach ($houses as $house) {
        foreach ($house['forms'] as $form) {

            if (!$projectForms['forms']) {
                array_push($projectForms['forms'], array('id' => $form['id'], 'name' => $form['name'], 'percentage' => $form['percentage'], 'streets' => array($house['fullStreet'])));
            } else {
                foreach ($projectForms['forms'] as $key => $value) {
                    if ($projectForms['forms'][$key]['id'] === $form['id']) {
                        array_push($projectForms['forms'][$key]['streets'], $house['fullStreet']);
                    } else if ($projectForms['forms'][$key]['id'] !== $form['id']) {
                        array_push($projectForms['forms'], array('id' => $form['id'], 'name' => $form['name'], 'percentage' => $form['percentage'], 'streets' => array($house['fullStreet'])));
                    }
                }
            }
        }
    }
    dd($projectForms['forms']);
    //Return to the view
    dd($projectForms);
    return view('example')->with(['projectForms' => $projectForms]);

dd $houses:

array:6 [▼
  0 => array:3 [▼
    "id" => 97641
    "fullStreet" => "SomeStreet 1"
    "forms" => array:1 [▼
      0 => array:3 [▼
        "id" => 2456
        "name" => "Some name"
        "percentage" => 6.6666666666667
      ]
    ]
  ]
  1 => array:3 [▼
    "id" => 97642
    "fullStreet" => "SomeStreet 2"
    "forms" => array:1 [▼
      0 => array:3 [▼
        "id" => 2456
        "name" => "Some Name"
        "percentage" => 6.6666666666667
      ]
    ]
  ]
  2 => array:3 [▼
    "id" => 97643
     "fullStreet" => "SomeStreet 3"
     "forms" => array:1 [▼
      0 => array:3 [▼
        "id" => 2456
        "name" => "Some Name"
        "percentage" => 6.6666666666667
      ]
    ]
  ]
  3 => array:3 [▼
    "id" => 97644
    "fullStreet" => "SomeStreet 4"
    "forms" => array:1 [▼
      0 => array:3 [▼
        "id" => 2456
        "name" => "Some Name"
        "percentage" => 6.6666666666667
      ]
    ]
  ]
   4 => array:3 [▼
    "id" => 97645
    "fullStreet" => "SomeStreet 5"
    "forms" => array:1 [▼
      0 => array:3 [▼
        "id" => 2489
        "name" => "Some name"
        "percentage" => 3.3333333333333
      ]
    ]
  ]
  5 => array:3 [▼
    "id" => 97646
    "fullStreet" => "SomeStreet 6"
    "forms" => array:1 [▼
      0 => array:3 [▼
        "id" => 2489
        "name" => "Some Name"
        "percentage" => 3.3333333333333
      ]
    ]
  ]
]

dd $projectForms when done:

array:3 [▼
  0 => array:4 [▼
    "id" => 2456
    "name" => "Some Name"
    "percentage" => 6.6666666666667
    "streets" => array:4 [▼
      0 => "Some Street 1"
      1 => "Some Street 2"
      2 => "Some Street 3"
      3 => "Some Street 4"
    ]
  ]
  1 => array:4 [▼
    "id" => 2489
    "name" => "Some Name"
    "percentage" => 3.3333333333333
    "streets" => array:2 [▼
      0 => "Some Street 5"
      1 => "Some Street 6"
    ]
  ]
  2 => array:4 [▼
    "id" => 2489
    "name" => "Some Name"
    "percentage" => 3.3333333333333
    "streets" => array:1 [▼
       0 => "Some Street 6"
    ]
  ]
]

So as you can see in the dd from $projectForms Some Street 6 is added twice even though the id is used before. I am wondering what I can do to make my code only add it once.

Aucun commentaire:

Enregistrer un commentaire