【问题标题】:How to select specific part of an array when two arrays are returned?返回两个数组时如何选择数组的特定部分?
【发布时间】:2009-03-28 23:52:24
【问题描述】:

在一个while循环中我有:

$row = mysql_fetch_array($result)

$row 下有两个数组,当使用 print_r 显示时,会显示以下内容:

Array
(
[4] => Post Content
[value] => Post Content
)

Array
(
[4] => Post Title
[value] => Post Title
)

如何从数组中选择“帖子内容”和“帖子标题”而不在 while 循环中重复?

这个问题的原始版本将重复与问题混淆了。问题是当第二个数组[value] 都在$row 下时,如何提取它们。

【问题讨论】:

  • 我认为这里还有一个问题是:为什么在查询的两个不同行中返回两条相关的信息?
  • 确实如此。该项目涉及从数据库中迁移数据,而我没有为此设计。所以现在,这个问题已经解决了。感谢您的关注。

标签: php arrays


【解决方案1】:

您还可以确保不会使用 mysql_fetch_assoc() 或 mysql_fetch_row() 将值插入两次。
因此:

$row = mysql_fetch_assoc($result);
Array
(
['value'] => Post Content
)

Array
(
['value'] => Post Title
)

【讨论】:

    【解决方案2】:

    您想确保一个数组只有unique 值吗?如果这不适用于数组中的数组,那就是经典的重复数据删除,存储您已经看到的内容。

    $dedupedValues = array()
    foreach ($row as $items) {
        if (! is_set($dedupedValues[$items['value']])) {
            $dedupedValues[$items['value']] = true;  // we have this value
            echo "echo the title/value....";
        }
    
    }
    

    另一种选择是改进获取数据的 SQL 以首先避免重复(请参阅:MySQL 'DISTINCT'

    【讨论】:

      【解决方案3】:

      Pim Jager 展示了更好的方法,但如果你坚持使用 mysql_fetch_array():

      $i = 0;
      $size = count($row);
      if ($size > 0) {
        while ($i < floor($size / 2)) {
         ..... = $row[$i];
         $i += 1;
        }
      }
      

      编辑:

      又看了一遍,不知道是不是很明白这个问题。

      如果你有嵌套数组,例如:

      $row = array('data1' => array('orange', 'banana', 'apple'),
                   'data2' => array('carrot', 'collard', 'pea'));
      

      然后你想访问每个数组:

      $data1 = $row['data1'];
      // = array('orange', 'banana', 'apple')
      $data2 = $row['data2'];
      // = array('carrot', 'collard', 'pea')
      // OR
      $orange = $row['data1'][0];
      $banana = $row['data1'][1];
      $apple = $row['data1'][2];
      $carrot = $row['data2'][0];
      // ... so on..
      

      考虑到这一点,循环如下所示:

      $i = 0;
      $size = count($row);
      if ($size > 0) {
        while ($i < floor($size / 2)) {
         $something = $row['data1'][$i]; //Or $row[0][$i]; using your example
         $something = $row['data2'][$i]; //Or $row[1][$i]; using your example
         $i += 1;
        }
      }
      

      但我真的建议使用 mysql_fetch_assoc() 和 foreach 循环,就像在 Pims Jagers 示例中一样

      【讨论】:

        【解决方案4】:

        根据 Topbit 的建议,通过对原始查询进行轻微重组并使用两个 while 循环,找到了最终解决方案。

        while($row_title = mysql_fetch_array($result_title)){
        $row_body = mysql_fetch_array($result_body);
        
            // code
        }
        

        感谢所有提出解决方案的人。

        【讨论】:

          猜你喜欢
          • 2017-04-09
          • 2014-03-09
          • 2015-04-07
          • 2022-10-05
          • 1970-01-01
          • 1970-01-01
          • 2021-04-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多