3 arrays, preg_match and merge of the results in PHP

I have 3 different multidimensional arrays:

// INPUT DATA WITH HOUSE DESCRIPTION. STRUCTURE: ID, OPTION DESCRIPTION

$input_house_data = array (
array("AAA","Chimney with red bricks"),
array("BBB","Two wide windows in the main floor"),
array("CCC","Roof tiles renewed in 2015")
);

// CATALOGUE WITH ALL HOUSE EQUIPMENT OPTIONS. STRUCTURE: ID, OPTION NAME

$ct_all_house_options = array (
  array("0001","Chimney"),
  array("0002","Garden"),
  array("0003","Roof tiles"),
  array("0004","Windows"),
  array("0005","Garage")
);

// SEARCH STRINGS AS REGULAR EXPRESSIONS. STRUCTURE: ID, EQUIPMENT OPTION NAME, REGULAR EXPRESSION TO SEARCH

$ct_house_options = array (
  array("0001","Chimney","/^Chimney with./"),
  array("0003","Roof tiles","/^Roof tiles./"),
  array("0004","Windows","/.windows./"),
  array("0004","Windows","/.wide windows./")    
);

I would like to search within $input_house_data by use of the regular expressions from the array $ct_house_options in order to indicate which equipment has a house. The result should be the whole list with all possible options and status "available" or "not available":

0001 - Chimney - available
0002 - Garden - not available
0003 - Roof tiles - available
0004 - Windows - available
0005 - Garage - not available

I tried to realize it as following:

$arrlength_input_house_data = count($input_house_data);
$arrlength_ct_all_house_options = count($ct_all_house_options);
$arrlength_ct_house_options = count($ct_house_options);

For loop with preg_match function. All results are written into array $matches (including dublicates):

for ($row1 = 0; $row1 < $arrlength_input_house_data; $row1++) {

   for ($row2 = 0; $row2 < $arrlength_ct_house_options; $row2++) {
   
if (preg_match($ct_house_options[$row2][2], $input_house_data[$row1][1]) === 1) {
    $matches[] = $ct_house_options [$row2][0];
}
}
}

Deleting of dublicates:

$unique = array_unique($matches);
print_r($unique);

So now I have got the unique results:

Array ( [0] => 0001 [1] => 0004 [3] => 0003 )

The next step should be merge of the array $ct_all_house_options and unique results from $unique. Unfortunatelly I cannot get it zealized. Do you have any idea how to get it? Maybe is any more simple way to realize it?

>Solution :

Loop through the array with all options. Check if the ID is in your $unique list, then it’s available.

foreach ($ct_all_house_options as [$id, $name]) {
    if (in_array($id, $unique)) {
        echo "$id - $name - available<br>";
    } else {
        echo "$id - $name - not available<br>";
    }
}

Leave a Reply