我已经知道问题的原因,而不是代码。
每行基值的字段内容分别为
因此使用str_replace
删除了行
$query = $db->query_first("SELECT * FROM table ");
$array1 = explode(",",$query[filed1]);
$array1 = str_replace("\n","",$array1);
$array2 = explode(",",$query[filed2]);
$array2 = str_replace("\n","",$array2);
foreach($array1 as $value)
{
if (in_array($value,$array2))
{
//true
}else{
//false
}
}
检查if Each value in $array2 is present in $array1 or not
表格数据:
filed1 | filed2
ahmed,jon,maya,omar | omar,maya
我的代码:
$query = $db->query_first("SELECT * FROM table ");
$array1 = explode(",",$query[filed1]);
$array2 = explode(",",$query[filed2]);
$length = count($array1);
for ($i = 0; $i < $length; $i++)
{
if (in_array($array1[$i] , $array2))
{
//true
}else{
//false
}
}
或者这个:
$query = $db->query_first("SELECT * FROM table ");
$array1 = explode(",",$query[filed1]);
$array2 = explode(",",$query[filed2]);
foreach($array1 as $value)
{
if (in_array($value,$array2))
{
//true
}else{
//false
}
}
我的问题是我的代码不能正常工作,我确信我的查询也会给出结果和数组。
array1的输出:
Array ( [0] => maya [1] => omar [2] => ahmed [3] => join)
array2的输出:
Array ( [0] => omar [1] => maya )
那么,我的代码中的错误在哪里?!
注意:
我不想check all value from array2 are in array1
,我想要check if Each value in $array2 is present in $array1 or not
- 专注于这个词Each value
而不是all value
像:
if (in_array('omar',$array1))
{
echo 'found';
}else{
echo 'not found'; }
if (in_array('maya',$array1))
{
echo 'found';
}else{
echo 'not found';
}
if (in_array('jon',$array1))
{
echo 'found';
}else{
echo 'not found';
}
etc ...
但我不想这样,我想把它放在一个循环中。
答案 0 :(得分:2)
是的,你可以在这种情况下使用一个循环,如果你真的想要,一个简单的foreach就足够了:
$array1 = array_map('trim', $array1); // on explode make sure remove trailing/leading spaces
$array2 = array_map('trim', $array2);
foreach($array1 as $name) { // so each value of array1
if(in_array($name, $array2)) { // is compared inside the contents of array2
// if found
echo "$name is found in " . '$array2';
} else {
echo "$name is NOT found in " . '$array2';
}
}
答案 1 :(得分:0)
我认为你应该迭代array2,以便检查array2的所有值,而不是相反,因为你说:“
检查$ array2中的每个值...
$query = $db->query_first("SELECT * FROM table ");
$array1 = explode(",",$query['filed1']);
$array2 = explode(",",$query['filed2']);
foreach($array2 as $value)
{
if (in_array($value,$array1))
{
//true
}else{
//false
}
}
答案 2 :(得分:0)
我已经知道问题的原因,而不是代码......
每行基值的字段内容分别
因此使用str_replace
删除了行
$query = $db->query_first("SELECT * FROM table ");
$array1 = explode(",",$query[filed1]);
$array1 = str_replace("\n","",$array1);
$array2 = explode(",",$query[filed2]);
$array2 = str_replace("\n","",$array2);
foreach($array1 as $value)
{
if (in_array($value,$array2))
{
//true
}else{
//false
}
}
答案 3 :(得分:0)
array_diff()
是一种单函数方法,用于获取其他数组中不存在的项数组
$array1 = array('ahmed','jon','maya','omar');
$array2 = array('omar','maya');
$result = array_diff($array1,$array2); // Array ( [0] => ahmed [1] => jon )
您可能需要切换参数顺序才能达到预期效果。
您也可以使用array_intersect()
执行反向
答案 4 :(得分:0)
@Ghost的解决方案产生了正确的输出,但正如您所说,您知道问题不是您的代码。显然问题是您查询的数据格式不完全匹配。那么,以下是如何处理调试此问题的方法:
可能的怀疑是某些数据有填充。 (奇怪的是,@ Ghost关于修剪结果的建议不起作用。)
$array1 = explode(",",$query['filed1']);
$array2 = explode(",",$query['filed2']);
var_dump($array1);
echo "\n";
var_dump($array2);
echo "\n";
以上应该揭示问题。如果没有,您可以更深入地了解in_array中哪个确切的比较失败。如果您没有可用的xdebug,只需在循环中循环:
foreach ($array1 as $value) {
if (in_array($value, $array2)) {
echo "\n[$value found in \$array2]\n";
} else {
echo "\n[$value NOT found in \$array2]\n";
}
foreach ($array2 as $value2) {
if ($value !== $value2) {
echo "\$array1's '$value' !== \$array2's '$value2'\n";
} else {
echo "\$array1's '$value' === \$array2's '$value2'\n";
}
}
}
输出会告诉你到底出了什么问题。
注意:您应该在引号中包含filed1和filed2,因为您将它们用作字符串键。当PHP解析您的代码时,它会发出通知(错误)并在将其解释为字符串时返回。