0

I'm trying to use an if statement to compare two arrays values.I am not comparing indexes. If the values match each other, then I want to print out a value from the multidimensional array. I tried to use the solutions in :

  1. How to compare two arrays and remove matching elements from one for the next loop?

  2. array values in multidimensional array

  3. Array_values from multidimensional array

However, these examples are not quite answering my problem. I don't need to produce a new array, I want to loop through the values, and if I have a match, echo a value to the screen.

Please see my code below, the issue is below the '///////////////////////////' marks:

<?php


$str ="";


// events array
$events = array( array("PokeMon", "Hall D" , "1:00 AM"),
                 array("Sonic the Hedgehog", "WorkShop 1" , "11:00 AM"),
                 array("Tasbura", "Video 3" , "2:00 PM"),
                 array("Sailor Moon ", "Panel 4" , "6:00 PM") 
               );

// location array
$row=array(
"Arena","Hall D","Video 1","Video 2","Video 3","Video 4","Video 5","Video 6","HD Theater",
"Panel 1","Panel 2","Panel 3","Panel 4","WorkShop 1","WorkShop 2","WorkShop 3","WorkShop 4",
"Autograph 1","Autograph 2"
 );

// event start time array
$col=array(
"","9:00 AM","10:00 AM","11:00 AM","1:00 PM","2:00 PM","3:00 PM","4:00 PM","5:00 PM","6:00 PM",
"7:00 PM","8:00 PM","9:00 PM","10:00 PM","11:00 PM","12:00 AM","1:00 AM","2:00 AM",
 );

// length of  location and start time arrays 
$rowLength=count($row);
$colLength=count($col);


$str .= "<table><tr><td bgcolor='green'><table border='1' bordercolor='black'><tr>";

for($i = 0; $i < $colLength; $i++){
   $str .= "<td width='100' height='25'  bgcolor='yellow'>";
   $str .= $col[$i];
   $str .= "</td>";


}


   for ($j = 0; $j < $rowLength; $j++){
    $str .= "<tr><td width='100' height='25' bgcolor='pink'>";
    $str .= $row[$j];
    $str .= "</td> ";


        for ($k = 0; $k < $colLength-1; $k++){

            $str .= "<td width='100' height='25'  bgcolor=' #70DBDB'>";



//////////////////////Here is where I need to compare the arrays:

            if( ($row[$j]==$events[$j][1]) && ($col[$k+1]==$events[$k+1][2])){

                $str .= $events [$j][0];
///////////////////////////////////////////////////////////////////     


            }else{

            $str .= " ";

            } 

            $str .= "</td>";

        }

        $str .= " </tr>";

    }

 echo $str ."</table></td></tr></table>";

?>

This is an example of what I'm trying to create: http://leobee.com/android/push/so/stdt2.php

Here is the code from the example:

<?php
// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL ^ E_NOTICE);

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

$str ="";
$row=array(
'Arena',"Hall D","Video 1","Video 2","Video 3","Video 4","Video 5","Video 6","HD Theater",
"Panel 1","Panel 2","Panel 3","Panel 4","WorkShop 1","WorkShop 2","WorkShop 3","WorkShop 4",
"Autograph 1","Autograph 2"
 );

$col=array(
"","9:00 AM","10:00 AM","11:00 AM","1:00 PM","2:00 PM","3:00 PM","4:00 PM","5:00 PM","6:00 PM",
"7:00 PM","8:00 PM","9:00 PM","10:00 PM","11:00 PM","12:00 AM","1:00 AM","2:00 AM",
 );


$rowLength=count($row);
$colLength=count($col);
//echo $rowLength." ".$colLength."<br>";

$str .= "<table><tr><td bgcolor='green'><table border='1' bordercolor='black'><tr>";

for($i = 0; $i < $colLength; $i++){
   $str .= "<td width='100' height='25'  bgcolor='yellow'>";
   $str .= $col[$i];
   $str .= "</td>";



}



   for ($j = 0; $j < $rowLength; $j++){
   $str .= "<tr><td width='100' height='25' bgcolor='pink'>";
   $str .= $row[$j];


   $str .= "</td> ";


    for ($k = 0; $k < $colLength-1; $k++){
   $str .= "<td width='100' height='25'  bgcolor=' #70DBDB'>";
////////////////////////////////////////////////////////////////////////////    
        if( ($row[$j]=="Arena") && ($col[$k+1]=="9:00 AM")){

             $str .= "Poketmon";

        }else{
            $str .= "";
        }

 ///////////////////////////////////////////////////////////////////////////
   $str .= "</td>";

    }

   $str .= " </tr>";

}

 echo $str ."</table></td></tr></table>";

?>
Community
  • 1
  • 1
Leoa
  • 1,167
  • 2
  • 14
  • 31

1 Answers1

1

I've been playing with your code and arrived at the following solution. I hope you like and understand it:

<?php

// events array
$events = array(
    array('PokeMon', 'Hall D' , '1:00 AM'),
    array('Sonic the Hedgehog', 'WorkShop 1' , '11:00 AM'),
    array('Tasbura', 'Video 3' , '2:00 PM'),
    array('Sailor Moon ', 'Panel 4' , '6:00 PM') 
);

$events_flat = array();

foreach($events as $event)
{
    $events_flat[$event[0]] = $event[1] . $event[2];
}

// location array
$locations = array(
    'Arena', 'Hall D', 'Video 1', 'Video 2', 'Video 3',
    'Video 4', 'Video 5', 'Video 6', 'HD Theater', 'Panel 1', 
    'Panel 2', 'Panel 3', 'Panel 4', 'WorkShop 1', 'WorkShop 2',
    'WorkShop 3', 'WorkShop 4', 'Autograph 1', 'Autograph 2'
);

// event start time array
$times = array(
    '9:00 AM', '10:00 AM', '11:00 AM', '1:00 PM', '2:00 PM',
    '3:00 PM', '4:00 PM', '5:00 PM', '6:00 PM', '7:00 PM',
    '8:00 PM', '9:00 PM', '10:00 PM', '11:00 PM', '12:00 AM',
    '1:00 AM', '2:00 AM'
);

$html = '<table><tr><td bgcolor="green"><table border="1" bordercolor="black"><tr><td></td>';

foreach ($times as $time)
{
    $html .= '<td width="100" height="25" bgcolor="yellow">';
    $html .= htmlspecialchars($time);
    $html .= '</td>';
}

foreach ($locations as $location)
{
    $html .= '<tr><td width="100" height="25" bgcolor="pink">';
    $html .= htmlspecialchars($location);
    $html .= '</td>';

    foreach ($times as $time)
    {
        $html .= '<td width="100" height="25" bgcolor="#70DBDB">';

        $event = array_search($location . $time, $events_flat);

        if ($event === FALSE)
        {
            $html .= ' ';
        }
        else
        {
            $html .= htmlspecialchars($event);
        }

        $html .= '</td>';
    }

    $html .= ' </tr>';
}

$html .=  '</table></td></tr></table>';

echo $html;

?>
J. Bruni
  • 20,322
  • 12
  • 75
  • 92
  • this is phenomenal! I didn't think about flattening the array. And I didn't know I could a search to compare two arrays like this. Thanks. – Leoa Jul 06 '12 at 14:43
  • I'm a little confused with this line `$events_flat[$event[0]] = $event[1] . $event[2];` The value of $event[0] is being re-assigned (concationated) to the values of $event[1] . $event[2] How are you able to later in the code get the value back in: `$event = array_search($location . $time, $events_flat);`? From the documentation array_search produces an index, which is not the value. Sorry I'm a little confused on this point. – Leoa Jul 06 '12 at 15:04