首页 > 解决方案 > PHP数字增量未定义

问题描述

我有下面的代码,它在countingNumbers 变量上返回未定义。我需要实现类名编号,以便我可以在 JavaScript 中循环并给它们单独的“阅读更多”标签。

<?php $countingNumbers = 0 ?>

            <?php 
            
            function custom_echo($x, $length){

                if(strlen($x)<=$length)
                    {
                        echo $x;
                    }
                    else
                    {   
                        $y=substr($x,0,$length) . '...';
                        echo $y;
                        echo '<div class="service-about__link' . $countingNumbers . '">
                                READ MORE
                              </div>';
                    }
                } 

            ?>

            @foreach($services as $service)
            <?php $countingNumbers++ ?>
            
            <div class="service-about movement{{$countingNumbers}} row row-margin">
                <div class="col-lg-6">
                    <h3 class="service-about__title">
                        {!!$service->title!!}
                    </h3>
                    
                    <div class="service-about__content-small">
                        <?php 
                        custom_echo($service->content, 200); ?>
                    </div>
                    <div class="service-about__content-large">
                        {!!$service->content!!}
                    </div>
                </div>
                <div class="col-md-6">
                    <div class="service-about__image">
                        <img src="{{url('')}}/img/services/{{$service->image}}">
                    </div>
                </div>
            @endforeach

标签: javascriptphpmysqllaravel

解决方案


  1. 正如@N69S 指出的那样,$countingNumbers不在custom_echo()'s 范围内。为此,您可以通过以下方式传递它use()
<?php $countingNumbers = 0 ?>

            <?php 
            
            function custom_echo($x, $length) use($countingNumbers) {

                if(strlen($x)<=$length)
                    {
                        echo $x;
                    }
                    else
                    {   
                        $y=substr($x,0,$length) . '...';
                        echo $y;
                        echo '<div class="service-about__link' . $countingNumbers . '">
                                READ MORE
                              </div>';
                    }
                } 

            ?>

            @foreach($services as $service)
            <?php $countingNumbers++ ?>
            
            <div class="service-about movement{{$countingNumbers}} row row-margin">
                <div class="col-lg-6">
                    <h3 class="service-about__title">
                        {!!$service->title!!}
                    </h3>
                    
                    <div class="service-about__content-small">
                        <?php 
                        custom_echo($service->content, 200); ?>
                    </div>
                    <div class="service-about__content-large">
                        {!!$service->content!!}
                    </div>
                </div>
                <div class="col-md-6">
                    <div class="service-about__image">
                        <img src="{{url('')}}/img/services/{{$service->image}}">
                    </div>
                </div>
            @endforeach

  1. 如果您的数组具有数字增量索引,您可以这样做(如果没有,您可以使用循环变量,正如@brombeer 指出的那样):
<?php 

function custom_echo($index, $x, $length){

    if(strlen($x)<=$length)
        {
            echo $x;
        }
        else
        {   
            $y=substr($x,0,$length) . '...';
            echo $y;
            echo '<div class="service-about__link' . $index . '">
                    READ MORE
                    </div>';
        }
    } 

?>

@foreach($services as $index => $service)

<div class="service-about movement{{$index}} row row-margin">
    <div class="col-lg-6">
        <h3 class="service-about__title">
            {!!$service->title!!}
        </h3>
        
        <div class="service-about__content-small">
            <?php 
            custom_echo($index, $service->content, 200); ?>
        </div>
        <div class="service-about__content-large">
            {!!$service->content!!}
        </div>
    </div>
    <div class="col-md-6">
        <div class="service-about__image">
            <img src="{{url('')}}/img/services/{{$service->image}}">
        </div>
    </div>
@endforeach

  1. 正如@AlbertoSinigaglia 指出的那样,您还可以摆脱剩余的 PHP 代码块。

你的看法:

@foreach($services as $index => $service)

<div class="service-about movement{{$index}} row row-margin">
    <div class="col-lg-6">
        <h3 class="service-about__title">
            {!!$service->title!!}
        </h3>
        
        <div class="service-about__content-small">
            @include('custom_echo', [
                'index' => $index,
                'x' => $service->content,
                'length' => 200
            ])
        </div>
        <div class="service-about__content-large">
            {!!$service->content!!}
        </div>
    </div>
    <div class="col-md-6">
        <div class="service-about__image">
            <img src="{{url('')}}/img/services/{{$service->image}}">
        </div>
    </div>
@endforeach

custom_echo.blade.php

@if (strlen($x)<=$length)
    {{ $x }}
@else
    {{ substr($x,0,$length) }}&hellip;
    <div class="service-about__link{{ $index }}">
                READ MORE
    </div>
@endif

推荐阅读