【问题标题】:Naming Keys in a Multidimensional Array in PHP在 PHP 中为多维数组中的键命名
【发布时间】:2013-08-19 20:55:55
【问题描述】:

我有一个 csv 文件中的数据,我使用以下方法将其组织成一个多维数组:

$handle = fopen("bankdata.csv", "r");

while(($data = fgetcsv($handle, 0 ,",")) !==FALSE) {

    $transactions[] = $data;

 }  

数组现在看起来像这样:

Array
(
[0] => Array
    (
        [0] => 2000
        [1] => paycheck
        [2] => credit
    )

[1] => Array
    (
        [0] => 75
        [1] => grocery
        [2] => debit
    )

[2] => Array
    (
        [0] => 45
        [1] => gas
        [2] => debit
    )

[3] => Array
    (
        [0] => 900
        [1] => investments
        [2] => credit
    )

[4] => Array
    (
        [0] => 1500
        [1] => bonus
        [2] => credit
    )  

现在我想命名每个嵌套数组中的键。我想我会创建一个新的多维数组,其中包含相同数量的嵌套数组,它们的值是我想添加到原始数组中的键的预期名称,然后执行 'array_combine':

$names = array('amount','source','type');

$run = 1;

while($run < 6){
  $run = $run +1;  
  $names2[] = $names;   
}

$combine = array_combine($names2, $transactions);

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:

    你可以使用数组合并:

    $keynames=array('amount','source','type');
    foreach ($transactions as $i=>$row) {
       $transactions[$i]=>array_combine($keynames, $row);
    }
    

    解决问题的正确方法是不要将数据读入数组然后对其进行转换 - 在读取时对其进行转换

    while(($data = fgetcsv($handle, 0 ,",")) !==FALSE) {
        $transactions[]=array_combine($keynames, $data);
    }
    

    顺便说一句,PHP 不做多维数组——它们是嵌套的。尽管手册中说了什么,但它们仅模拟多维数组。

    【讨论】:

    • 您的解决方案可能比我的要好得多,效率也更高。
    • 完美谢谢。顺便说一句,“仿真”和真实的东西有什么区别?
    • 仿真?对于大多数意图和目的,它的行为类似于多维数组,但稀疏数组将使用更少的空间 - 不受任何预定义维度的限制,未设置的值与空值的行为不同。
    【解决方案2】:

    尝试以下方法:

    $arr = array(
        array(2000, 'paycheck', 'credit'),
        array(75, 'grocery', 'debit'),
        array(45, 'gas', 'debit'),
        array(900, 'investments', 'credit'),
        array(1500, 'bonus', 'credit')
    );
    
    $keys = array('amount','source','type');
    
    // $a will make a reference to the array within $arr
    // and override the array
    foreach($arr as &$a)
    {
        // Override the array keys
        $a = array_combine($keys, $a);
    }
    
    /* Output:
    Array
    (
        [0] => Array
            (
                [amount] => 2000
                [source] => paycheck
                [type] => credit
            )
    
        [1] => Array
            (
                [amount] => 75
                [source] => grocery
                [type] => debit
            )
    
        [2] => Array
            (
                [amount] => 45
                [source] => gas
                [type] => debit
            )
    
        [3] => Array
            (
                [amount] => 900
                [source] => investments
                [type] => credit
            )
    
        [4] => Array
            (
                [amount] => 1500
                [source] => bonus
                [type] => credit
            )
    
    )
    */
    

    【讨论】:

      猜你喜欢
      • 2021-05-25
      • 2015-06-09
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      相关资源
      最近更新 更多