假设我有以下数组:
Array
(
[0] => Array
(
[0] => a
[1] => 1
)
[1] => Array
(
[0] => b
[1] => 8
)
[2] => Array
(
[0] => c
[1] => 16
)
[3] => Array
(
[0] => d
[1] => 21
)
....
)
内部数组中的数字是从范围(0,100)中随机生成的,它们不会重复。
我想创建一个循环,它将从0迭代到100并检查循环迭代是否等于上面数组的内部数。例外结果是包含100个元素的数组:
Array
(
[0] => const
[1] => a
[2] => const
[3] => const
[4] => const
[5] => const
[6] => const
[7] => const
[8] => b
[9] => const
[10] => const
.
.
[16] => c
[17] => const
.
.
[21] => d
[22] => const
[23] => const
.
.
)
我需要的是:
for ($i=0; $i < 100; $i++) {
if($i === $name[$i][1]) {
$new_array[] = $name[$i][0];
} else {
$new_array[] = 'const';
}
}
但是我无法让它发挥作用,因此我需要一些帮助。
我不是英语母语人士,所以希望你能理解我想要达到的目标。谢谢你的帮助。
答案 0 :(得分:1)
你需要一个嵌套循环,如:
for ($i=0; $i < 100; $i++):
$found = false;
foreach($name as $array):
if($array[1] === $i):
$found = true;
$new_array[] = $array[0];
endif;
endforeach;
if(!$found):
$new_array[] = 'const';
endif;
endfor;
答案 1 :(得分:1)
它不起作用的原因是因为每次$i
递增时你都试图在$name[$i]
中进行匹配,而不是检查$name
中的所有数组,我能想到的最简单的解决方案(并执行最少的迭代次数)将是这样的:
$new_array = array();
foreach ($name as $n) {
$new_array[$n[1]] = $n[0];
}
for ($i=0; $i<100; $i++) {
if (!isset($new_array[$i])) {
$new_array[$i] = 'const';
}
}
ksort($new_array);
首先,循环浏览$name
数组,并使用$new_array
=&gt;设置key
。 value
对[1] => 'a', [8] => 'b'
,然后在for
循环中检查key ($i)
是否已经设置,如果没有,请设置value
'const'。最后,按$new_array
键进行排序。
此示例中的迭代次数为count($name) + 100
,而嵌套循环则为100 * count($name)
。
答案 2 :(得分:0)
使用
for ($i=0; $i < 100; $i++) {
if($i === $name[$i][1]) {
$new_array[$i] = $name[$i][0];
}
else{
$new_array[$i] = 'const';
}
}
答案 3 :(得分:0)
for ($i = 0; $i < count($name); ++$i) {
if ($name[$i][1] === $i) {
$name[$i] = $name[$i][0];
} else {
$name[$i] = 'const';
}
}
答案 4 :(得分:-1)
为什么使用Identical
运算符代替Equal
for ($i=0; $i < 100; $i++) {
if($i == $name[$i][1]) {
$new_array[] = $name[$i][0];
} else {
$new_array[] = 'const';
}
}