2016-07-13 148 views
1

这将工作PHP的:嵌套for循环不工作

$arrayOrdenado = array(); 
if ($rows[4][2] == $orden[0]) { 
    array_push($arrayOrdenado,$rows[4]); 
} 

不过,虽然环路,将找不到任何巧合

for ($i = 0; $i < $orden.length - 1; $i++) { 
    for ($y = 0; $y < $rows.length - 1; $y++) { 
     if ($rows[y][2] == $orden[i]) { 
      array_push($arrayOrdenado, $rows[y]); 
      break; 
     } 
    } 
} 

我不知道为什么

+6

'$ rows.length-1' /'$ orden.length'是一个JavaScript的东西。 'count($ rows)'/'count($ orden)'是php。在php中'''用于concatenation,比如''a“。”b“'和'”ab“'相同。你的代码可能会抛出像'未定义常量,假定长度'的错误。 –

+0

请详细说明你的问题。你想做什么? – tovishalck

+0

我有一个数组($ orden),它按顺序同步这些ID。我想命令包含数组的第二个数组($ rows),并且ID是[2]值,即$ rows [y] [2]有一个静态[2]。 –

回答

-1

使用foreach循环访问数组。

foreach (array_slice($orden, 0, -1) as $o) { 
    foreach (array_slice($rows, 0, -1) as $row) { 
     if ($row[2] == $o) { 
      $arrayOrdenado[] = $row; 
     } 
    } 
} 

另一种方式来写是这样的:

foreach (array_slice($rows, 0, -1) as $row) { 
    if (in_array($row[2], array_slice($orden, 0, -1)) { 
     $arrayOrdenado[] = $row; 
    } 
} 

我使用array_slice()以匹配您原来for循环,而忽略了数组的最后一个元素使用length-1的行为。我实际上将它移到了一个变量中,所以它不必每次都通过外部循环来完成它,但是我在上面的代码中将它保留了下来以使它更短。

1

你忘了$ characters:

for ($i=0; $i < count($orden)-1; $i++) { 
     for ($y=0; $y < count($rows)-1; $y++) { 
     if($rows[$y][2]==$orden[$i]){ 
      array_push($arrayOrdenado,$rows[$y]); 
      break; 
     } 
     } 
    } 
+0

谢谢!我最近一直在做太多的JavaScript ..这加乔纳森的答案解决了我的问题 –

+0

你能接受我的答案吗? –

+0

另外,我将如何在foreach循环中实现像$ i和$ y这样的计数器? –