Go through object properties to check if string contains - php

I want to go through every property my object has and check whether it is contained in a given string. The problem is, I now have 10 properties and wrote 10 if/else-cases. I think I can compromise it by writing a foreach loop
Currently it's like this
if (strpos($localWrapper->siteContents, $project->company_name) !== false)
echo "<br>true<br>";
else
echo 'false<br>';
if (strpos($localWrapper->siteContents, $project->company_street) !== false)
echo 'true<br>';
else
echo 'false<br>';
and so on.
There must be a way that I can go through every property of the project object and check whether it is contained in the siteContents-string and then print out a true or false depended on the result.
How could I achieve this?

You can loop through it:
foreach($project as $key=>$value){
echo $key.": (".$value.") ".strpos($localWrapper->siteContents, $value) !== false ? 'true' : 'false';
echo '<br />';
}
This is really basic though, if you've read the documentation on foreach, you could figure this out yourself :)
a simple google php loop through object gives A LOT of results, all doing the same :)
If your array has arrays as values, you need to go recursive. This functions checks if the value is a string. if so test it to your searchString. If it is an array, do the same for the new array
function SeeIfMyValuesMatch($searchString, $array){
foreach($array as $key=>$value){
echo $key.' ';
// Check if the value is an array, if so, go 1 deeper
if( is_array($value){
SeeIfMyValuesMatch($searchString, $value); // on deeper
}
else{
echo strpos($searchString, $value) ? 'true' : 'false'; // or echo
}
echo '<hr />'; // This is just for looks
}
}
SeeIfMyValuesMatch($project); // And start
Small sidenote: This may result in a weird looking text, I didnt make it pretty, just to show functionallity

Related

Creating a function with a string variable and array parameters in php

I am trying to create a function with 2 parameters one is name variable and 2 an array with name list.
If the name os in the array it should return or print 'true' in the browser otherwise it should give 'false'
For ex:
nameexistCheck('Johnny',['Jack','Sarah','Andy','Johnny']) // true
nameexistCheck('Johnny',['Jack','Sarah','Andy'])// false
I would be very grateful someone shows me how to write logic to this issue. I am a new developer and I have tried many ways but it not working.
This is one of them.
nameexistCheck($name, $names);
$names = array('Johnny', 'Jack')
foreach($names as $value){
if ($name===$value){
echo 'true';
}else{
echo 'false';
}
}
nameexistCheck('Johnny', ['Jack', 'Sarah','Johnny']);
Output is false false true
It is not working properly I need only one output true or false. And another problem is in my code I have write a name by hand to the list but, it should fill it automaticly. Please help me with this task.
It's obvious you have no idea what you're doing so I will not explain further but I will suggest you take some basic PHP tutorials. For now, this should work for you
function nameexistCheck($name, $names){
return in_array($name, $names) ? 'true' : 'false';
}
echo nameexistCheck('Johnny', ['Jack', 'Sarah','Johnny']); // true

Check if 2 vars are not in array in php

This is one is confusing me.
I am trying to check if 2 vars are not in an array with an OR, but it returns the opposite results than the expected.
Does 2 !in_array, in conjunction with an OR, creates 2 negatives = positive?
The case:
$user->groups = array(2,13,15);
if ( !in_array(2, $user->groups) || !in_array(0, $user->groups) ) {
echo "Not in Array";
} else {
echo "In Array";
}
Since 2 is in the array, I expect the script to echo "In Array", but it echoes "Not in Array". If I remove the second !in_array after the OR, it echoes "In Array". If I change the OR with an AND, it echoes "In Array".
It doesn't make much sense, or I am just that confused at the moment. Can someone give some input?
The problem is you are using || instead of &&. What the logical OR (||) does is that it checks the first condition and if it is true then it does not test the other conditions in the if statement. Here is the revised code:
$user->groups = array(2,13,15);
if ( !in_array(2, $user->groups) && !in_array(0, $user->groups) ) {
echo "Not in Array";
} else {
echo "In Array";
}
Hope this helps!
Try this:
if ( !in_array(2, $user->groups) && !in_array(0, $user->groups) ) {
echo "Not in Array";
} else {
echo "In Array";
}
This will ensure that when both (&&) 0 and 2 are not in the array, it prints "Not in array"
As stated in my comment, you should be checking that the first value and the second value are not in the array: !in_array(2, $user->groups) && !in_array(0, $user->groups).
For two conditions, I would consider the following suggestion overkill but you may find it useful if you want to search for a larger number of values:
$arr = array(1,2,3);
$search = array(1,2);
$all_in = function($prev, $curr) use ($arr) {
return $prev && in_array($curr, $arr);
};
if (array_reduce($search, $all_in, true)) {
echo 'all values in $search are in $arr';
}
else {
echo 'some of the values in $search are not in $arr';
}
array_reduce applies the callback function $all_in to each of the values of the $search array and keeps track of a boolean value (initialised to true) that remains true as long as all the values are in the array $arr.
As I said, this approach isn't particularly useful if you're only looking for two values but one benefit is that you can easily add values to the $search array without changing any of the other code.

match a variable with at least one value in an array - php

I have one variable that comes from a database.
I then want to check whether that value is the same of one of the values in an array.
If the variable matches one of the array values, then I want to print nothing, and if the variable does not match one of the array values, then I want to print something.
This is the code I have been trying without luck, I know that contains is not valid code, but that is the bit I cannot find any info for:
<?php
$site = getStuff();
$codes = array('value2', 'value4');
if ($codes contains $site)
{
echo "";
}
else
{
echo "something";
?>
So if the database would return value1 for $site, then the code should print "something" because value1 is not in the array.
The function you are looking for is in_array.
if(in_array($site, array('value2', 'value4')))
if(!in_array($site,$codes)) {
echo "something";
}
To provide another use way to do what the other answers suggest you can use a ternary if
echo in_array($site, $codes)?"":"something";

lost var in php

I am fairly new to PHP and Yii, and the problem that I am not nor as the question in google, so the only thing I can think of is to ask the question to this list that I have solved many problems.
The issue is as follows: in the code that I attached, I read several records that I keep in array and after the process.
Well, if you look at the debug entries in foreach in he first, all goes well and the variable $items is loaded, but when I get to the second debug $items variable has the correct number of elements, but the elements are empty : count ($items) = 2 but $items[0] and $items[1] are null
$idiomas=CListaMidiomas::model()->findAll();
$items=array();
$nombre=array();
$a=0;
foreach ($idiomas as $idioma){
$nombre[$a]=$idioma->sIdioma;
$items[$a]=TblCategoriastexto::model()->findAll(
array('condition'=>'id='.$data->id.' AND idIdioma='.$idioma->id_idioma));
echo "<br>---AAAAAAAAAAA--".$a."-----------<br>";
CVarDumper::dump($items); //in this moment is correct
if (empty($items[$a]) ||$items[$a]==null ){ // not enter because $items have content
$items[$a]=new TblCategoriastexto();
$items[$a]->idIdioma=$idioma->id_idioma;
}
$a++;
}
echo ">>>>>>>>>>>>>>>".count($items) ; //<<<<<<<<<<present 2
CVarDumper::dump($items); // but in this moment t0 2 are null
for ($a=0;$a<count($items) ;$a++){
echo "<b>".CHtml::encode($nombre[$a]).":</b>";
$out="";
$item=$items[$a];
echo "<br>-----".$a."-----------<br>";
CVarDumper::dump($items[$a]);<<<<<<<<<<<<<<<<<<<<<<<<null
for ($b=1;$b<=20;$b++){
$campo="tc".$b;
$out.=$items[$a]->$campo . ",";<<<<<<<<<<<<<<<<error
}
echo CHtml::encode($out);
echo"<br>";
}
This line: if (empty($items[$a]) ||$items[$a]=null ){ will always assign $items[$a] to null.
To compare values, use the comparison (for equality) operator, == instead of the assignment operator =.
Try changing this line:
if(isset($items[$a]->$campo)) {
$out.=$items[$a]->$campo . ",";
}

Check for repeated elements in PHP array (if not empty)

Hi lets say I've got this array:
$check_post = array(
$_POST["a_post"],
$_POST["b_post"],
$_POST["c_post"],
$_POST["d_post"],
$_POST["e_post"],
$_POST["f_post"],
$_POST["g_post"],
$_POST["h_post"],
$_POST["i_post"]
);
I want to check whether any elements of this array are repeated, so the best I got is this:
if (count(array_unique($check_post)) < count($check_post))
echo "Duplicate";
else
echo "NO Duplicate";
Which works fine except for the fact that if more that one textarea is left blank (which is allowed) it gives me FALSE.
What I want is to NOT consider the empty values of the array for the (count(array_unique())
BTW I have tried with empty() and with array_values($check_post) but I cant get around it.
Thanks in advance!! please ask for any needed clarification.
To remove all the empty values from the comparison you can add array_diff():
if (count(array_unique(array_diff($check_post,array("")))) < count(array_diff($check_post,array(""))))
Well the way you have it is fine, though as you say, you have a need to remove the empty entries first.
$non_empty_check_post = array_filter($check_post, create_function('$item', 'return !empty($item);');
if (count(array_unique($non_empty_check_post)) < count($non_empty_check_post)) {
echo "Duplicate";
} else {
echo "NO Duplicate";
}
Filter out the blanks from your array:
function no_blanks($val) {
// Do not use empty() here if you don't consider the string "0" as blank
return trim($val) !== '';
}
$check_post = array_filter($check_post, 'no_blanks');
if (count(array_unique($check_post)) < count($check_post))
echo "Duplicate";
else
echo "NO Duplicate";
if (count(array_unique(array_filter(function(x) {return !empty(x)}, $check_post)) < count($check_post))
echo "Duplicate";
else
echo "NO Duplicate";

Categories