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 不适用于两个数组的主要内容,如果未能解决你的问题,请参考以下文章