【问题标题】:how can I print in data of two array in same order如何以相同的顺序打印两个数组的数据
【发布时间】:2020-02-04 01:10:47
【问题描述】:

我想像这样在两个不同的数组中搜索一些数据;

$arr1[]=('2019-10-3', '2019-10-9', '2019-10-10', '2019-10-13', '2019-10-17', '2019-10-21',);

另一个数组就是这样的;

for($i=1;$i<31;$i++){ $arr2[]=date('Y').'-'.date('m').'-'.$i; }

如果$arr1 数据在$arr2 '1' 否则'0' 以这样的相同顺序打印到屏幕

if($arr2['0']==$arr1[0]){echo '1' ;} else {echo '0'}

 '2019-10-1' is not in $arr1 echo '0',
 '2019-10-2' is not in $arr1 echo '0',
 '2019-10-3' is in $arr1 echo '1',
'2019-10-4' is not in $arr1 echo '0',
'2019-10-5' is not in $arr1 echo '0',
'2019-10-6' is not in $arr1 echo '0',
'2019-10-7' is not in $arr1 echo '0',
'2019-10-8' is not in $arr1 echo '0',
'2019-10-9' is in $arr1 echo '1',
'2019-10-10' is in $arr1 echo '1',
'2019-10-11' is not in $arr1 echo '0',
....

我使用了这段代码,但它并没有像我想要的那样工作。只打印这个; 1,1,1,1,1

for($k=0;$k<5;$k++){
    if(in_array($arr1[$k],$tar)){
       echo '1,';
    } else {
       echo '0,';
    }
}

【问题讨论】:

    标签: php arrays codeigniter sorting


    【解决方案1】:

    这将是一个有点清理的变体:

    <?php
    $arr1 = ['2019-10-3', '2019-10-9', '2019-10-10', '2019-10-13', '2019-10-17', '2019-10-21'];
    $arr2 = [];
    for($i = 1; $i < 31; $i++) { 
        $arr2[] = sprintf("%d-%d-%d", date('Y'), date('m'), $i);
    }
    
    $output = [];
    for($k = 0; $k < 30; $k++) {
        $output[] = in_array($arr2[$k], $arr1) ? '1' : '0';
    }
    
    echo implode(", ", $output);
    

    这里有一个稍微慢一些但可读性和健壮性更好的变体:

    <?php
    $arr1 = ['2019-10-3', '2019-10-9', '2019-10-10', '2019-10-13', '2019-10-17', '2019-10-21'];
    $arr2 = [];
    for($i=1;$i<31;$i++) { 
        $arr2[$i] = sprintf("%d-%d-%d", date('Y'), date('m'), $i);
    }
    
    $output = [];
    foreach($arr2 as $val) {
        $output[] = in_array($val, $arr1) ? '1' : '0';
    }
    
    echo implode(", ", $output);
    

    两种变体的输出显然是:

    0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0
    

    【讨论】:

    • 您可以删除三元组,然后只转换 in_array 结果。 (int)in_array($val, $arr1);
    • @Andreas 绝对正确。但是我假设10 仅用于演示目的,我希望OP 实际使用不同的值。这就是三元运算的动机。无论如何,谢谢;-)
    • 请看一下我的stackoverflow.com/questions/58330220/…这个话题相关的问题?
    【解决方案2】:

    你的意思是这样的?

    <?php
    $arr1=array ('2019-10-3', '2019-10-9', '2019-10-10', '2019-10-13', '2019-10-17', '2019-10-21');
    for($i=1;$i<31;$i++)
    { 
        $arr2[]=date('Y').'-'.date('m').'-'.$i;
    }
    for($k=0;$k<30;$k++){
          if(in_array($arr2[$k],$arr1)){
                 echo '1,';
              } else {
                  echo '0,';
              }
           }
    ?>
    
     Output: 0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0
    

    【讨论】:

    • 其实不,输出不是你声称的,它会包含一个尾随逗号,如果你是精确的...... ;-)
    • 我知道,但为了避免它,你可以这样做: $k
    【解决方案3】:

    在创建第二个数组时,您可以测试它是否在数组 1 中。

    $arr1 = ['2019-10-3', '2019-10-9', '2019-10-10', '2019-10-13', '2019-10-17', '2019-10-21'];
    
    
    for($i=1;$i<31;$i++){ 
        $date = date('Y').'-'.date('m').'-'.$i;
        echo $date . ": ";
        if(in_array($date, $arr1)){
             echo "1\n";
        }else{
             echo "0\n";
        }
    }
    

    输出:

    2019-10-1: 0
    2019-10-2: 0
    2019-10-3: 1
    2019-10-4: 0
    2019-10-5: 0
    2019-10-6: 0
    2019-10-7: 0
    2019-10-8: 0
    2019-10-9: 1
    2019-10-10: 1
    2019-10-11: 0
    2019-10-12: 0
    2019-10-13: 1
    2019-10-14: 0
    2019-10-15: 0
    2019-10-16: 0
    2019-10-17: 1
    2019-10-18: 0
    2019-10-19: 0
    2019-10-20: 0
    2019-10-21: 1
    2019-10-22: 0
    2019-10-23: 0
    2019-10-24: 0
    2019-10-25: 0
    2019-10-26: 0
    2019-10-27: 0
    2019-10-28: 0
    2019-10-29: 0
    2019-10-30: 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 2015-05-05
      • 2012-11-12
      • 2016-02-18
      • 2018-09-13
      • 1970-01-01
      相关资源
      最近更新 更多