Foreach 不适用于两个数组

Posted

技术标签:

【中文标题】Foreach 不适用于两个数组【英文标题】:Foreach is not working for two arrays 【发布时间】:2018-05-11 12:35:12 【问题描述】:

我有一个数组

$assid=Array
(
    [0] => Array
        (
            [0] => 6
            [1] => 2
            [2] => 3
        )

    [1] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )

    [2] => Array
        (
            [0] => 6
        )

    [3] => Array
        (
            [0] => 2
            [1] => 3
        )

)

$key1=Array
    (
        [0] => 0
        [1] => 1
        [2] => 2
        [3] => 3
    )

这里的 $key1 表示 $assid 的索引

还有一个 foreach 循环

 @foreach($roles as $id=>$name)



<option value="$id"@if(in_array($id, $assid))selected="selected"@endif>$name</option>

   @endforeach

这里的角色有 12 个值。所以数组将迭代 12 次。我的问题是我想用 foreach 附加 $assid[0],[1],[2],[3] 所以我 $key1 值所以我试过了

$a=0;
     @foreach($roles as $id=>$name)



    <option value="$id"@if(in_array($id, $assid[$a]))selected="selected"@endif>$name</option>
    <?php  $a++;?>
       @endforeach

因为 $key1 数组仅作为索引 0 1 2 3.所以我需要 $a 应该在 foreach 循环中从 0 增加到 3 12 次迭代,所以在 3 之后它显示未定义的索引 4。我没有得到适当的解决方案。请帮帮我。请

【问题讨论】:

PHP: "Notice: Undefined variable", "Notice: Undefined index", and "Notice: Undefined offset"的可能重复 你能显示使用$assid 的值吗?是数组吗?如果是,则打印它并将输出添加到您的问题中您为$key1做了什么 @AlivetoDie--Anantsingh 我已经更新了问题请帮助我 @juvajacob 实际上我无法理解您的问题。 $roles 数组数据也是需要的。这样我就可以检查您的代码。请也添加。或者可能是任何一个答案已经帮助了你。如果不在您的问题中添加 $roles 数组 【参考方案1】:
$a=0;
 @foreach($roles as $id=>$name)
<option value="$id"@if(in_array($id, $assid[$a]))selected="selected"@endif>$name</option>
<?php  $a++;?
 if(a>4)
 a = 0;
   >
   @endforeach

如果你超过 4 岁,它会使值为零,所以它从零开始

【讨论】:

@thanks for your reply..but 同样的错误未定义索引 @juvajacob 你能证明使用$assid 的值吗?是数组吗?如果是,则打印它并将输出添加到您为$key1所做的问题中@ @AlivetoDie--Anantsingh:我已经更新了我的问题。请帮助【参考方案2】:

如果我了解您的问题,您正在寻找这些东西...试试这个:-

$assid=Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
)
$roles=Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 6
[6] => 7
[8] => 8
[9] => 9
[10] => 10
[11] => 11

)
@foreach($roles as $id => $name)
  @if(isset($assid[$id]))
    <option value="$id"@if(in_array($id, $assid))selected="selected"@endif>$name</option>
  @else 
    <option value="$id">$name</option>
  @endif
@endforeach

希望对你有帮助!

【讨论】:

【参考方案3】:

可能它按预期工作。

$a=0;
@foreach($roles as $id=>$name)
<?php if($a>3) $a=0; ?>
<option value="$id"@if(in_array($id, $assid[$a]))selected="selected"@endif>$name</option>
<?php  $a++; ?>
@endforeach

【讨论】:

【参考方案4】:

您需要从N 循环返回0。使用计数器的 模 N + 1 的索引可以保证这一点。

要循环遍历数组的前 3 项,其中 N=2,因为数组具有从零开始的索引,我们将采用 模 3

@php ($a = 0)

@foreach($roles as $id=>$name)
   <option
     value="$id" 
     @if(in_array($id, $assid[$a % 3])) 
         selected="selected"
     @endif
   > $name </option>

   @php ($a = $a + 1)
@endforeach

【讨论】:

感谢您的回复..但它总是选择 4 个值。我的要求是第一次迭代 $assid[0]) 应该选择它取决于 $assid 数组。我已经更新了我的问题,你能再帮我一次吗? 对计数器取模 4 会在 3 处停止并返回到 0。您是否担心使用 assid 中的前 3 个数组进行循环? -yes ..so 第一个索引为 0 的数组,因此索引 0 的值为 6 2 3 应选择。第二次迭代索引 1 表示应选择 4、5、6。类似地等等。请帮助me.here assign[0] 表示第一个数组,assgn[1] 表示 2second 数组同样如此 好的,这意味着您将计数器的模 3 用于索引assid -四次迭代总是选择相同的值

以上是关于Foreach 不适用于两个数组的主要内容,如果未能解决你的问题,请参考以下文章

为啥对于每个循环都不适用于 JSON 数组

并行化不适用于 foreach 包

SwiftUI 中的 Picker 适用于 ForEach 的一个版本,但不适用于另一个版本 - 错误或预期行为?

为啥 forEach 不适用于儿童?

使用foreach打印多维数组[重复]

向 div 添加事件监听器适用于 ForEach() 方法,但不适用于 for 循环。有啥不同?