简化数组的方法

时间:2017-11-08 20:27:12

标签: php arrays

想要简化这个数组:

$week = array(7) { 
[0]=> string(10) "2017-11-05" 
[1]=> string(10) "2017-11-06" 
[2]=> string(10) "2017-11-07" 
[3]=> string(10) "2017-11-08" 
[4]=> string(10) "2017-11-09" 
[5]=> string(10) "2017-11-10" 
[6]=> string(10) "2017-11-11" 
}

为:

$week = "2017-11-05", "2017-11-06", "2017-11-07", "2017-11-08", "2017-11-09", "2017-11-10", "2017-11-11";

并为我的$ date数组做同样的事情

$date = array(2) { [0]=> string(10) "2017-11-08" [1]=> string(10) "2017-11-22" } 

原因是我试图根据另一个数组中的值在数组中找到匹配项。在让in_array返回true时遇到问题。

示例:

if  (in_array($date, $week))  {
        echo "No Class!";
    } else { echo "Stuff"; }

2 个答案:

答案 0 :(得分:1)

由于var_dump如何输出它们,您的数组可能看起来很复杂,但它们等同于:

$week = ["2017-11-05", "2017-11-06", "2017-11-07", "2017-11-08", "2017-11-09", "2017-11-10", "2017-11-11"];    
$date = ["2017-11-00", "2017-11-22"]; 

使用array_intersect,您可以知道它们是否具有共同的字符串值:

if (array_intersect($date, $week)) {
    echo "match";
} else {
    echo "no match";
}

实际上,该函数将交集作为数组返回,因此您甚至可以从结果中知道哪些字符串在两个数组中都是通用的。但是,如果您只需要知道是否存在至少一个公共值,则上述if条件就可以。

答案 1 :(得分:0)

您尝试的内容无效,因为没有数组就不能有多个字符串:

首先,我建议你检查php-array,以便更好地理解数组如何在php中工作。

但我明白了背后的想法,其方法如下:

$weeks = ["2017-11-05", "2017-11-06", "2017-11-07", "2017-11-08", "2017-11-09", "2017-11-10", "2017-11-11"];
$dates = ["2017-11-08", "2017-11-22"];

$matches = array_map(function($date) use ($weeks) { 
   return in_array($date, $weeks);
}, $dates);

var_dump($matches);

看到它正常工作here