【问题标题】:PHP can I do this loop?PHP 我可以做这个循环吗?
【发布时间】:2010-08-14 00:43:56
【问题描述】:

我有一个循环(基于一个数组 - 可以增长但不会太多 - 最多 6 个键),例如:array('12','34','56',48')。我想做的是遍历数组,然后再次循环以找到“以前的”数组 val。

例如,key[0] = 12key[1] = 34 然后是 key[0] = 12key[2] = 56 然后是 key[1] = 34 等等。

数组的值是来自数据库的 ID,我需要(希望)运行基于“当前键”和前一个键的查询。

任何想法 - 可以做到吗?

【问题讨论】:

  • 我认为你错过了数组的要点。或者你没有很好地描述你的问题。
  • 您能否详细说明您正在寻找的示例?例如在 2 个循环中拼写出来。

标签: php arrays key


【解决方案1】:
$num_elem = count($array); 
for ($i = 0; $i < $num_elem; $i++)
{
   $curr_val = $array[$i];
   $prev_val = ( 0 == $i) ? null: $array[$i-1];
}

【讨论】:

    【解决方案2】:

    与其他解决方案不同,我建议反对使用基于索引的访问器。

    在 php 中,键不一定是按顺序排列的。例如,如果您在数组上调用 natsortkey=&gt;value 关系保持不变,但数组本身实际上已重新排序,从而导致违反直觉的结果。 (见Why isn't natsort (or natcasesort) working here?

    我会使用类似的东西:

    <?php
      $ids = array('12','34','56','48');
      $previous = false;
      foreach($ids as $id)
      {
        echo "current: $id\n";
        echo "previous: $previous\n";
        $previous = $id;
      }
    ?>
    

    【讨论】:

      【解决方案3】:

      我不认为这里真的需要多个循环。我会将数组的内部指针与next()prev()current() 函数一起使用。

      【讨论】:

        【解决方案4】:

        如果我理解正确,你想这样做。

        for($i=1; $i < count($array); $i++) {
          $currentValue = $array[$i];
          $previousValue = $array[$i-1];
        
          // Here you can run a query based on the current and the previous value
        }
        

        例如,将$array 视为array(12,34,56,48),您将进行3 次迭代,其中$currentValue$previousValue 将具有以下值:

        1. 第一次迭代:$currentValue = 34, $previousValue = 12
        2. 第二次迭代:$currentValue = 56, $previousValue = 34
        3. 第三次迭代:$currentValue = 48, $previousValue = 56

        【讨论】:

        • 以上你会错过使用当前值的零索引 - 这可能会阻止一些必要的操作。
        • 如果要求使用当前值和前一个值进行查询,则必须从第二项开始,否则前一个值将不存在。无论如何,我知道这取决于所需的具体行为,我认为是我提到的那个。
        【解决方案5】:
        <?
        $val = 56;
        $data = array(12, 34, 12, 56, 34);
        for($i = 0; $i < count($data); $i++) {
          if($data[$i] == $val) {
            if($i == 0) die("No previous");
            $previous = $data[$i-1];
          }
        }
        
        echo "Previous to $val was $previous";
        

        或者更好的是使用array_search() 查找给定 $val 的索引

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-12
          • 2012-04-23
          • 2022-12-01
          • 1970-01-01
          • 2020-11-24
          • 1970-01-01
          相关资源
          最近更新 更多