【问题标题】:Print values from a foreach by range?按范围从foreach打印值?
【发布时间】:2015-11-05 14:59:11
【问题描述】:

我有一个包含各种字符串的数组:

$arreglo = array('juan castillo','andres felipe','gerardo diaz','onofre perez','paolo jara','jason guerra','luis lopez','ivan delgado','diego teran','andres figueroa','ines mosquera','karen chamorro','marco fernandez','rene valencia','valeria ramirez','ximena villavicencio','danilo zambrano','amanda yela','pablo morillo','william rodriguez','carlos chavez','camilo castro');
foreach ($arreglo as $key => $value) {
      echo $value;
}

我如何只打印一系列特定字符串,例如从“andres figueroa”到“danilo zambrano”的一系列值。谢谢大家

【问题讨论】:

    标签: php printing foreach range


    【解决方案1】:

    这仅在数组始终为 0 索引时才有效,但您可以使用 array_search 查找您正在寻找的开始/结束元素的索引(假设您总是通过值来寻找它们)和然后使用array_slice 仅迭代您想要的范围内的值...

    $arreglo = [
                'juan castillo',
                'andres felipe',
                'gerardo diaz',
                'onofre perez',
                'paolo jara',
                'jason guerra',
                'luis lopez',
                'ivan delgado',
                'diego teran',
                'andres figueroa',
                'ines mosquera',
                'karen chamorro',
                'marco fernandez',
                'rene valencia',
                'valeria ramirez',
                'ximena villavicencio',
                'danilo zambrano',
                'amanda yela',
                'pablo morillo',
                'william rodriguez',
                'carlos chavez',
                'camilo castro'
               ];
    $startPos = array_search('andres figueroa', $arreglo, true);
    $endPos   = array_search('danilo zambrano', $arreglo, true);
    
    foreach (array_slice($arreglo, $startPos, $startPos - $endPos + 2) as $key => $value) {
          echo $value, "\n";
    }
    

    请记住,这将是一个包容性范围,因此包括 'andres figueroa''danilo zambrano' 以及介于两者之间的所有内容。如果您不确定它是否为零索引,也可以通过 array_values 运行该数组。

    【讨论】:

      【解决方案2】:
      $arreglo = array('juan castillo','andres felipe','gerardo diaz','onofre perez','paolo jara','jason guerra','luis lopez','ivan delgado','diego teran','andres figueroa','ines mosquera','karen chamorro','marco fernandez','rene valencia','valeria ramirez','ximena villavicencio','danilo zambrano','amanda yela','pablo morillo','william rodriguez','carlos chavez','camilo castro');
      
      $from = array_search("andres figueroa", $arreglo);
      $to   = array_search("danilo zambrano", $arreglo);
      
      print_r(array_slice($arreglo, $from, ($to - $from)+1));
      

      【讨论】:

        【解决方案3】:

        有很多方法,但一个简单的for 就可以解决问题:

        for ( $i = 9; $i <= 16; $i++ )
            echo $arreglo[$i];
        

        当然,您可能不想像这样对索引进行硬编码,而且您 可以使用array_search找到他们:

        $start = array_search( 'andres figueroa', $arreglo );
        $stop = array_search( 'danilo zambrano', $arreglo );
        
        
        for ( $i = $start; $i <= $stop; $i++ )
            echo $arreglo[$i];
        

        请注意,这仅在数组中 andres figureoa 出现在 danilo zambrano 之前时才有效!要对它们进行排序,您可以这样做:

        list( $start, $stop ) = array( min($start, $stop), max( $start, $stop ) );
        

        你也可以使用range():

        foreach ( range( $start, $stop ) as $i )
            echo $arreglo[$i];
        

        【讨论】:

        • 我可以用字符串指定范围吗?
        【解决方案4】:

        您打算如何通过起点和终点?字符串?

        编辑:

        使用 array_search 查找字符串在数组中的位置,然后执行 for 循环。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-05-02
          • 1970-01-01
          • 2019-05-20
          • 1970-01-01
          • 2021-03-29
          • 2017-12-23
          • 1970-01-01
          相关资源
          最近更新 更多