【问题标题】:How do you add to a new index on a Multi-dimensional array within a foreach loop?如何在 foreach 循环中添加到多维数组的新索引?
【发布时间】:2011-05-27 01:48:18
【问题描述】:

再次见鬼,我想知道在 foreach 循环中如何将数据添加到新的数组索引?

我有自动取款机的代码是,

// Connect to the database to gather all data pertaiing to the link in question
$assoResult = mysql_query("SELECT * FROM associate_users");
while ($assoRow = mysql_fetch_field($assoResult)) {
    $resultArray[] = $assoRow->name;
}

// Connect to the database to gather all data pertaiing to the link in question
$assoResult2 = mysql_query("SELECT * FROM associate_users WHERE id='$getID'");
while ($assoRow2 = mysql_fetch_object($assoResult2)) {

    foreach ($resultArray as $row) { 
        $array = array(array( 1 => $assoRow2->$row, 2 => $row, ),);
        echo "<br />"; print_r($array);
    }               
}

下面是来自"echo "br />"; print_r($array);" 的输出数据行。

================================================ ==================

Array ( [0] => Array ( [1] => 1 [2] => id ) )
Array ( [0] => Array ( [1] => Bob[2] => contactName ) )
Array ( [0] => Array ( [1] => Bob's Tyres [2] => company ) )
Array ( [0] => Array ( [1] => XXXXXXXXXXXXXX [2] => address1 ) )
Array ( [0] => Array ( [1] => XXXXXXXXXXXXXX [2] => address2 ) )
Array ( [0] => Array ( [1] => XXXXXXXXX [2] => address3 ) )
Array ( [0] => Array ( [1] => XXXXXX [2] => postcode ) )

正如您所看到的,数组正在一遍又一遍地创建一个新数组,我需要的是上述数据在每个循环中增加第一维索引键,所以它看起来像......

================================================ ==================

Array ( [0] => Array ( [1] => 1 [2] => id ) )
Array ( [1] => Array ( [1] => Bob[2] => contactName ) )
Array ( [2] => Array ( [1] => Bob's Tyres [2] => company ) )
Array ( [3] => Array ( [1] => XXXXXXXXXXXXXX [2] => address1 ) )
Array ( [4] => Array ( [1] => XXXXXXXXXXXXXX [2] => address2 ) )
Array ( [5] => Array ( [1] => XXXXXXXXX [2] => address3 ) )
Array ( [6] => Array ( [1] => XXXXXX [2] => postcode ) )

在此先感谢您,我没有办法让它发挥作用并且绝望了。

丹。

【问题讨论】:

    标签: php sql multidimensional-array foreach


    【解决方案1】:

    此代码无需低效地使用两个查询即可获得您要求的输出:

    // Connect to the database to gather all data pertaining to the link in question
    $result = mysql_query("SELECT * FROM associate_users WHERE id=" . (int)$getID);
    
    $resultArray = array();
    $resultCount = 0;
    $row = mysql_fetch_assoc($result);
    
    $count = 0;
    foreach ($row as $key => $value) {
        $temp = array();
        $temp[$count] = array(1 => $value, 2 => $key);
        $count++;
    
        echo "<br />"; print_r($temp);
    }
    

    你为什么要这样,我不知道。

    【讨论】:

    • 我不确定你是否注意到我在第一个 sql 查询中使用了“mysql_fetch_field”?我之所以使用 2,是因为在一个查询中使用了字段 fetch,而在另一个查询中使用了标准对象 fetch,如果它们都可以组合成 1 个查询,我很想知道如何(除非您在上面展示了这一点,而我根本看不到)?
    • 除非您有其他代码正在执行我们看不到的其他操作,否则无需使用第一个查询和mysql_fetch_field 来获取所有字段名称。我的代码应该产生与您在问题中发布的所需输出相同的输出。您问题中的代码将从associate_users 表中获取每个链接,只是为了获取单个链接。如果您的associate_users 表变大,这可能会减慢您的页面速度。如果你知道你的桌子会保持小,只要它适合你,就坚持你现有的。
    【解决方案2】:
        //extra code.declaring array
    $array = array();
    while ($assoRow2 = mysql_fetch_object($assoResult2)) {
        foreach ($resultArray as $row) { 
    // 1st parameter is the array name, here array name is array .give gd name according to use
           array_push($array,array( 1 => $assoRow2->$row, 2 => $row, ));
            echo "<br />"; print_r($array);
        }               
    }
    

    【讨论】:

      【解决方案3】:

      将分配部分代码的值更改为

          $count=0; 
          foreach ($resultArray as $row) { 
                  $array[$count][1] = $assoRow2->$row
                  $array[$count][2]=$row;
                  $count++;
                  echo "<br />"; print_r($array);
              }   
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-21
        • 2016-02-26
        • 1970-01-01
        • 2011-03-07
        • 2015-06-02
        • 2018-07-13
        • 2022-12-01
        • 1970-01-01
        相关资源
        最近更新 更多