Texan78 Posted April 19, 2014 Share Posted April 19, 2014 Hello, I have come across a small snag that I am not sure how to get around. I am getting this error. Warning: in_array() expects at most 3 parameters, 7 given in /home4/mesquiu0/public_html/inc-weather_radio_alert.php on line 78 Now, I know why I am getting this error. I am parsing and XML file to create the variable to get the values for the array. Now this is where the problem comes in. Since there is 6 possible values I am trying to pull there is only 3 values being produced at the time by the variable from the XML file at the time. So where I am stuck is how can I set this array up to look for these values when they are present and otherwise ignore it when they aren't as they won't always be present so it doesn't throw an error? What I am trying to do is if the variable from the XML file produces said values in the array then show this. This meaning echo a message. Here is the array //If alerts are in the source, set alert message $event = array( $event => "Flash Flood Watch", $event => "Flash Flood Warning", $event => "Severe Thunderstorm Watch", $event => "Severe Thunderstorm Warning", $event => "Torndao Watch", $event => "Torndao Warning" ); if (in_array("Flash Flood Watch", "Flash Flood Warning", "Severe Thunderstorm Watch", "Severe Thunderstorm Warning", "Torndao Watch", "Torndao Warning", $event)) { echo "Match found"; } the variable $event is created from parsing the XML file which has the possible values but, if the XML doesn't contain those values at the time then I get that error. So how would I need to address this array so I don't get the error but the array still looks for those values if present and echo the statement? -Thanks Quote Link to comment Share on other sites More sharing options...
PravinS Posted April 19, 2014 Share Posted April 19, 2014 i think your code should be like this $event = array("Flash Flood Watch", "Flash Flood Warning", "Severe Thunderstorm Watch", "Severe Thunderstorm Warning", "Torndao Watch", "Torndao Warning"); $searchvalue = "Flash Flood Watch"; //as example if (in_array($searchvalue, $event)) { echo "Match found"; } also go through in_array() function properly http://www.php.net/in_array Quote Link to comment Share on other sites More sharing options...
Texan78 Posted April 19, 2014 Author Share Posted April 19, 2014 i think your code should be like this $event = array("Flash Flood Watch", "Flash Flood Warning", "Severe Thunderstorm Watch", "Severe Thunderstorm Warning", "Torndao Watch", "Torndao Warning"); $searchvalue = "Flash Flood Watch"; //as example if (in_array($searchvalue, $event)) { echo "Match found"; } also go through in_array() function properly http://www.php.net/in_array Thank you but I am not sure what you did. You added.... $searchvalue = "Flash Flood Watch"; //as example but I don't see what that does or the purpose of that. How do you get the value? I don't understand the logic. Quote Link to comment Share on other sites More sharing options...
Texan78 Posted April 19, 2014 Author Share Posted April 19, 2014 Can an admin move this to "PHP Coding Help". I posted this in the wrong forum by mistake. It was late and I was tired and wasn't paying any attention. Quote Link to comment Share on other sites More sharing options...
bsmither Posted April 19, 2014 Share Posted April 19, 2014 (edited) "I am parsing an XML file to create the variable to get the values for the array." Would you give us an abridged XML string that represents the source of your parsing? For example: <notice><time></time><type></type><event>Flash Flood Watch</event></notice> You have parsed this string and the result from having found the <event> node, and assigning its value to a variable, would be as: $searchValue = "Flash Flood Watch"; $searchValue is considered the 'needle', and an array of possible values is considered the 'haystack'. So, the task is to determine whether this 'needle' is in the 'haystack'. in_array('needle', 'haystack') Edited April 19, 2014 by bsmither Quote Link to comment Share on other sites More sharing options...
Texan78 Posted April 20, 2014 Author Share Posted April 20, 2014 Ok, let me see if I can explain this better as I am just not the best at explaining things but, I will do my best. This is just a small snipped but the primary core of the XML parsing. //Set initial output to false $tData = false; $entries = simplexml_load_file($data); if(count($entries)): //Registering NameSpace $entries->registerXPathNamespace('prefix', 'http://www.w3.org/2005/Atom'); $result = $entries->xpath("//prefix:entry"); foreach ($result as $entry): $event = $entry->children("cap", true)->event; include ('inc-alert-colors.php'); endforeach; endif; Now from the snippet I am only parsing this from the XML $event = $entry->children("cap", true)->event; That gives me the $event variable. Now the event variable could have 120+ possible values for event. But at the most only 1 event would be show maybe 2-3 depending on the situation. So I created an array for the list of the possible values I want to find and if it finds it then display a message which is this. //If alerts are in the source, set alert message $event = array( $event => "Flood Watch", $event => "Flood Warning", $event => "Flash Flood Watch", $event => "Flash Flood Warning", $event => "Severe Thunderstorm Watch", $event => "Severe Thunderstorm Warning", $event => "Tornado Watch", $event => "Tornado Warning" ); if (in_array("Flood Watch", "Flood Warning", "Flash Flood Watch", "Flash Flood Warning", "Severe Thunderstorm Watch", "Severe Thunderstorm Warning", "Tornado Watch", "Tornado Warning", $event)) { echo "Match Found!"; } So basically that means out of the possible 120+ values from $event only look for those and if those are found echo a message. That leads me to these errors which I have already explained in my first post so look back at it to get the details. Warning: Illegal offset type in /home4/mesquiu0/public_html/inc-weather_radio_alert.php on line 73 Warning: in_array() expects at most 3 parameters, 9 given in /home4/mesquiu0/public_html/inc-weather_radio_alert.php on line 83 So my objective is out of the 120+ possible events find those certain ones and if those certain ones are found then display a message. If not, do nothing. It is pretty simple and straight forward but not sure how to get around this small snag. Quote Link to comment Share on other sites More sharing options...
QuickOldCar Posted April 20, 2014 Share Posted April 20, 2014 How is something like this? //Set initial output to false $tData = false; $entries = simplexml_load_file($data); if(count($entries)): //Registering NameSpace $entries->registerXPathNamespace('prefix', 'http://www.w3.org/2005/Atom'); $result = $entries->xpath("//prefix:entry"); //no need to include files over and over in a loop, keep outside the loop include ('inc-alert-colors.php'); //create an array of desired warnings $warnings = array("Flash Flood Watch", "Flash Flood Warning", "Severe Thunderstorm Watch", "Severe Thunderstorm Warning", "Torndao Watch", "Torndao Warning"); foreach ($result as $entry){ $event = trim($entry->children("cap", true)->event); if (in_array($warnings, $event)){ //need to set it's colors? switch ($event) { case "Flash Flood Watch": $color = "limegreen"; break; case "Flash Flood Warning": $color = "darkred"; break; case "Severe Thunderstorm Watch": $color = "palevioletred"; break; case "Severe Thunderstorm Warning": $color = "orange"; break; case "Torndao Watch": $color = "yellow"; break; case "Torndao Warning": $color = "red"; break; } echo "<p style='color:".$color.";'>".$event."</p>"; } } } Quote Link to comment Share on other sites More sharing options...
Texan78 Posted April 20, 2014 Author Share Posted April 20, 2014 (edited) Thanks for the suggestion. That doesn't work. The XML parsing part is fine, there is not problem with that. I just need to be able to search for a certain alert and if that alert is presence in the event variable from the XML then display a message. Now this partly works. $radiowarning = "<div class='{$bannerStyle}'><b>SEVERE WEATHER ALERT - {$event}</b> ... Listen now to our LIVE NOAA Weather Radio Stream <a href='{$feed}'>[Click here to listen]</a></div>"; //If alerts are in the source, set alert message $alerts = array($event); $searchvalue = "Flood Warning"; if (in_array($searchvalue, $alerts)) { echo $radiowarning; } Problem is with this line "$searchvalue = "Flood Warning"; " I can't enter more than one value I need for it to look for in the event variable otherwise it gives me this error. I need it to be like this... $searchvalue = "Flood Watch", "Flood Warning", "Flash Flood Watch", "Flash Flood Warning", "Severe Thunderstorm Watch", "Severe Thunderstorm Warning", "Tornado Watch", "Tornado Warning"; I have tried the whole needle and haystack method but the problem is as above. It will only look for one value. I can't have it look for multiple values. I just need a method to search for a certain alert which is created from the $event variable that is created from parsing the XML. If any of those alerts are present. I.E. in this case... "Flood Watch", "Flood Warning", "Flash Flood Watch", "Flash Flood Warning", "Severe Thunderstorm Watch", "Severe Thunderstorm Warning", "Tornado Watch", "Tornado Warning" Then display this message, echo $radiowarning; Which that variable is this. $radiowarning = "<div class='{$bannerStyle}'><b>SEVERE WEATHER ALERT - {$event}</b> ... Listen now to our LIVE NOAA Weather Radio Stream <a href='{$feed}'>[Click here to listen]</a></div>"; It should be something really easy in logic but for some reason I am really struggling with it. If X statement exists then echo X, is pretty much the gist of it where $events supplies the values to look for but, keep in mind, the values might now always be there because it is an XML file and changes constantly. Here is a test page. Works with one value but anymore it doesn't. http://www.mesquiteweather.net/wxtest.php Edited April 20, 2014 by Texan78 Quote Link to comment Share on other sites More sharing options...
bsmither Posted April 20, 2014 Share Posted April 20, 2014 I am confused about the XML source. Are you saying that after having parsed the XML source, the results of that parsing could contain more than one 'event'? So, after parsing, you end up with an array of found 'events': print_r($events): $events: Array( [0] => "Flood Watch" [1] => "Severe Thunderstorm Watch" [2] => "Tornado Watch" ) Now, you need to compare the $events array against the $warnings array. If any element in $events can be matched to any element in $warnings, then return those matches. If this is the case, please read array_intersect. Quote Link to comment Share on other sites More sharing options...
Solution adam_bray Posted April 20, 2014 Solution Share Posted April 20, 2014 Can't you use a foreach? $radiowarning = ' <div class="'.$bannerStyle.'"> <strong>SEVERE WEATHER ALERT - '.$event.'</strong> ... Listen now to our LIVE NOAA Weather Radio Stream <a href="'.$feed.'">[Click here to listen]</a> </div>'; //If alerts are in the source, set alert message $alerts = array($event); $searchvalue = array('Flood Watch', 'Flood Warning', 'Flash Flood Watch', 'Flash Flood Warning', 'Severe Thunderstorm Watch', 'Severe Thunderstorm Warning', 'Tornado Watch', 'Tornado Warning'); foreach( $searchvalue as $alert ) { if (in_array($alert, $alerts)) { echo $radiowarning; } } Quote Link to comment Share on other sites More sharing options...
Texan78 Posted April 20, 2014 Author Share Posted April 20, 2014 Can't you use a foreach? $radiowarning = ' <div class="'.$bannerStyle.'"> <strong>SEVERE WEATHER ALERT - '.$event.'</strong> ... Listen now to our LIVE NOAA Weather Radio Stream <a href="'.$feed.'">[Click here to listen]</a> </div>'; //If alerts are in the source, set alert message $alerts = array($event); $searchvalue = array('Flood Watch', 'Flood Warning', 'Flash Flood Watch', 'Flash Flood Warning', 'Severe Thunderstorm Watch', 'Severe Thunderstorm Warning', 'Tornado Watch', 'Tornado Warning'); foreach( $searchvalue as $alert ) { if (in_array($alert, $alerts)) { echo $radiowarning; } } Yes, that seems to work perfect. I completely over looked the foreach. The last thing I can't seem to figure out which looks right is the variable for the CSS styling isn't applying. Does anyone see anything wrong? $bannerStyle = 'color: #FFF; width:100%; border: #fff 1px solid; font-size:11px; font-weight:normal; font-family: Arial,Helvetica,sans-serif; text-align: center; background-color:' .$alertColor. '; margin-bottom:5px; padding: .2em 0em .2em 0em'; $radiowarning = ' <div class="'.$bannerStyle.'"> <strong>SEVERE WEATHER ALERT - </strong>Listen now to our LIVE NOAA Weather Radio Stream <a href="'.$feed.'" onclick="return popup(this, "noaa")" title="Live NOAA Radio For Dallas County">[Click here to listen]</a> </div>'; Quote Link to comment Share on other sites More sharing options...
Texan78 Posted April 20, 2014 Author Share Posted April 20, 2014 Nevermind, I got it sorted. It should be style instead of class like so. All is good now. $bannerStyle = '"color: #FFF; width:100%; border: #FFF 1px solid; font-size:11px; font-weight:normal; font-family: Arial,Helvetica,sans-serif; text-align: center; background-color:' .$alertColor. '; margin-bottom:5px; padding: .2em 0em .2em 0em"'; $radiowarning = ' <div style='.$bannerStyle.'> <strong>SEVERE WEATHER ALERT - </strong>Listen now to our LIVE NOAA Weather Radio Stream <a href="'.$feed.'" onclick="return popup(this, "noaa")" title="Live NOAA Radio For Dallas County">[Click here to listen]</a> </div>'; Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.