【问题标题】:Assigning Index to PHP Array为 PHP 数组分配索引
【发布时间】:2014-07-20 19:35:38
【问题描述】:

我从 mysql 表中动态拉取以下数组,需要为每个元素分配索引。

Array    
(
    [yma] => 65.0000
    [mhip] => 65.0000
    [tzp] => 40.0000
    [mzp] => 45.0000
    [su] => 40.0000
    [tkp] => 74.0000
)

这是我的预期输出。

Array    
    (
        [0][yma] => 65.0000
        [1][mhip] => 65.0000
        [2][tzp] => 40.0000
        [3][mzp] => 45.0000
        [4][su] => 40.0000
        [5][tkp] => 74.0000
    )

或者

Array    
        (
            [0] => 65.0000
            [1] => 65.0000
            [2] => 40.0000
            [3] => 45.0000
            [4] => 40.0000
            [5] => 74.0000
        )

如果我想要的输出如下所示,下面的答案可能会出现问题:

Array    
        (
            [0] => 'yma'
            [1] => 'mhip'
            [2] => 'tzp'
            [3] => 'mzp'
            [4] => 'su'
            [5] => 'tkp'
        )

我正在使用此代码来提取数据:

$myarray = array();
while($row = mysql_fetch_array($sql)){
     $myarray[$row['pawl']] = $row['contribution'];
}

如何获取我从 MySQL 获取/构建的数组并生成所需的输出?

【问题讨论】:

  • 你的问题是......?

标签: php mysql arrays indexing


【解决方案1】:

使用array_values。 “Array_values() 返回数组中的所有值,并以数字方式索引数组。”

还有,

$myarray = array();
while($row = mysql_fetch_array($sql)){
     $myarray[] = $row['contribution'];
}

这将分配一个从 0 开始的数字索引。

现在,如果您需要一个特定数字索引来匹配每个棘爪代码,

然后构建地图:

$map = array    
(
    ['yma'] => 1,
    ['mhip'] => 2,
    ['tzp'] => 3,
    ['mzp'] => 4,
    ['su'] => 5,
    ['tkp'] => 6,
);

并且重新映射 棘爪代码。

$remappedArray = array();
foreach($myarray as $pawlCode => $value){
    $newIndex = $map[$pawlCode];
    $remappedArray[$newIndex] = $value;
}

您希望如何处理丢失/新代码取决于您。

【讨论】:

    【解决方案2】:

    为了创建您想要的数组(我将专注于示例二,因为它更合理)您只需要一个函数 - array_values

    给定一个 输入数组

    Array    
    (
        [yma] => 65.0000
        [mhip] => 65.0000
        [tzp] => 40.0000
        [mzp] => 45.0000
        [su] => 40.0000
        [tkp] => 74.0000
    )
    

    它将返回一个仅包含值的数字索引数组,如下所示:

    Array    
            (
                [0] => 65.0000
                [1] => 65.0000
                [2] => 40.0000
                [3] => 45.0000
                [4] => 40.0000
                [5] => 74.0000
            )
    

    如果您需要键而不是值,您可以简单地在同一个起始数组上使用array_keys 函数(参见上面的输入数组) - 您将获得以下输出:

    Array    
            (
                [0] => 'yma'
                [1] => 'mhip'
                [2] => 'tzp'
                [3] => 'mzp'
                [4] => 'su'
                [5] => 'tkp'
            )
    

    PHP 有大量的数组函数,一般来说,您很可能会找到一个函数来帮助您获取/执行您对数组的任何操作。我鼓励您花一些时间在某个时候浏览these。知道您可以使用什么是值得的。

    【讨论】:

    • 这正是我想要的。谢谢一百万。
    • 不要使用这个。在下面使用一次。
    • 请您解释一下原因。我添加了第三个所需的输出。
    • 要获得第三种所需的输出格式,只需在原始数组上调用数组_键。当我开始工作时,我会用代码 sn-p 修改我的答案。
    【解决方案3】:

    将此用于您的第一个预期数组:

    $myarray = array();
    while($row = mysql_fetch_array($sql)){
        $myarray[] = array($row['pawl'] => $row['contribution']);
    }
    

    这对于您的第二个预期数组:

    $myarray = array();
    while($row = mysql_fetch_array($sql)){
        $myarray[] = $row['contribution'];
    }
    

    【讨论】:

    • 这实际上是onlu rigt的答案。其他需要先从 mysql 填充一个数组,然后在 thta 数组上调用其他方法以获得所需的结果。这直接给出了 deisted 的结果。
    • 根据最初的问题,作者展示了他从mysql填充数据数组的方法。他不是/不是要求一种方法来整理他的数据库中的数据 - 只是要求一种将其变成所需形式的方法。请务必在加权之前仔细阅读问题。
    • @Michal-sk 你是对的,但我是先问方法,然后才明白我的额外需求。你们太棒了。我已经用第三个期望的输出更新了我的问题,并尝试在此处应用方法和查询,但不知所措。请您更新答案。会很有帮助,因为我实际上在我的项目中使用了它。
    猜你喜欢
    • 1970-01-01
    • 2020-02-05
    • 2021-12-25
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    相关资源
    最近更新 更多