1

假设我有以下数组:

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';
  }
}

但我无法让它工作,因此我需要一些帮助。

我不是以英语为母语的人,所以希望你能理解我想要达到的目标。谢谢你的帮助。

4

5 回答 5

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设置你的,然后在循环中检查是否已经设置,如果没有,使用'const'设置它。最后,按其键排序。$new_arraykeyvalue[1] => 'a', [8] => 'b'forkey ($i)value$new_array

此示例中的迭代次数为count($name) + 100,而嵌套循环示例为100 * count($name)

于 2012-10-18T10:38:40.330 回答
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;
于 2012-10-18T10:05:44.987 回答
0

利用

for ($i=0; $i < 100; $i++) {
 if($i === $name[$i][1]) {
   $new_array[$i] = $name[$i][0];
  }
  else{
    $new_array[$i] = 'const';
  }
}
于 2012-10-18T10:03:30.660 回答
0
for ($i = 0; $i < count($name); ++$i) {
    if ($name[$i][1] === $i) {
        $name[$i] = $name[$i][0];
    } else {
        $name[$i] = 'const';
    }
}
于 2012-10-18T10:04:34.520 回答
-1

为什么你使用Identical运算符而不是Equal

for ($i=0; $i < 100; $i++) {
  if($i == $name[$i][1]) {
    $new_array[] = $name[$i][0];
  } else {
    $new_array[] = 'const';
  }
}
于 2012-10-18T10:05:33.363 回答