PHP foreach替代语法

时间:2017-11-05 08:41:00

标签: php foreach

我正在从“Murach PHP和MySQL第二版”一书中学习PHP,我遇到了这个我不太了解的代码......

<select name="productkey">
     <?php foreach ($products as $key => $product):
            $cost = number_format($product['cost'], 2);
            $name = $product['name'];
            $item = $name . ' ($)' . $cost . ')';
     ?> 
     <option value="<?php echo $key; ?>"> <?php echo $item; ?></option>

     <?php endforeach; ?>
</select>

为什么在foreach循环开头的冒号(:)后面有说明?

我读到结肠后应该有“?&gt;”然后执行指令然后在结束“”标记foreach循环结束...

请解释一下如果我在<?php foreach ($products as $key => $product): ?> let bus = new Vue(); Vue.component('building-inner', { props: ['floors', 'queue'], template: `<div class="building-inner"> <div v-for="(floor, index) in floors" class="building-floor" :ref="'floor' + (floors - index)"> <h3>Floor #{{floors - index }}</h3> <button type="button" class="up" v-if="index !== floors - floors">up</button> <button type="button" class="down" v-if="index !== floors - 1">down</button> </div> </div>`, beforeMount(){ bus.$emit('floors', this.$refs); } }) Vue.component('elevator', { data: { floorRefs: null }, props: ['floors', 'queue'], template: `<div class="elevator" ref="elevator"> <button type="button" v-for="(btn, index) in floors" class="elevator-btn" @click="go(index + 1)">{{index + 1}}</button> </div>`, beforeMount() { bus.$on('floors', function(val){ this.floorRefs = val; console.log(this.floorRefs) }) }, methods: { go(index) { this.$refs.elevator.style.top = this.floorRefs['floor' + index][0].offsetTop + 'px' } } }) new Vue({ el: '#building', data: { queue: [], floors: 5, current: 0 } })之后用$ cost,$ name和$ item开始编写LINES代码仍然有效?

4 个答案:

答案 0 :(得分:0)

冒号是使用括号的替代方法。 这个:

foreach (...) :
   #execute Code in loop
endforeach;

与此相同:

foreach (...) {
    #execute Code in loop
}

答案 1 :(得分:0)

是的它仍然可以工作:与{相同但你必须在foreach结束时编写endforeach它会做同样的事情更多信息查看此页面     documentation

答案 2 :(得分:0)

:称为Alternative Syntax For Control Structures

  

PHP为其某些控制结构提供了另一种语法;即,if,while,for,foreach和switch。在每种情况下,替代语法的基本形式是将左大括号更改为冒号(:),并将结束大括号分别更改为endif;,endwhile;,endfor;,endforeach;或endswitch;。

它允许你从foreach中省略大括号{},使其在模板中看起来更清晰,并且最常用。

答案 3 :(得分:0)

替代语法主要用于混合html内容。主要的优点是说你有这样的东西

<?php if( $var ){  ?>
<!-- some html here -->
    <?php foreach( $var as $v ){  ?>
         <!-- some html here -->
        <?php if( $v=='foo'){  ?>

            <!-- some html here -->
        <?php } ?>
    <!-- some html here -->
    <?php  } ?>
<!-- some html here -->
<?php } ?>

你到处都是}乱七八糟的地方,与此比较

<?php if( $var ):  ?>
<!-- some html here -->
    <?php foreach( $var as $v ):  ?>
         <!-- some html here -->
        <?php if( $v=='foo'):  ?>

            <!-- some html here -->
        <?php endif; ?>
    <!-- some html here -->
    <?php  endforeach; ?>
<!-- some html here -->
<?php endif; ?>

这是一个小例子,所以我不认为是否完全显示了这个问题,但是if阻止结束和foreach结束的地方要容易得多。

现在多了约200行的混合内容。否则,您可以查看它,因为:{end{blocktype};}

我个人从不使用它(除了SO),因为我不会在我的代码中混用HTML和PHP。

欢呼声。