添加到仅给定值的多维数组和位置的子键

时间:2012-05-05 21:10:04

标签: php multidimensional-array

Array
(    [Fixed Assets] => Array
    (
        [0] => 150
        [1] => Array
            (
                [Equimpent] => Array
                    (
                        [0] => Office Computer
                        [1] => Office Printer
                    )
            )
        [2] => Array
            (
                [Furniture and Fixtures] => Array
                    (
                        [0] => Desk
                        [1] => Desk Chair
                    )
            )
    )
)

作为层次结构帐户命名和编号架构,帐号可以从上面的示例数组派生,如下所示......

  • 固定资产家长帐户)# 150
  • Equimpent 固定资产子女)# 150-1
  • 家具和固定装置固定资产子女)# 150-2
  • 桌椅家具和夹具的孩子)# 150-2-1

我的谜题是如何将新帐户的添加编码到给定的数组中 只有所需的新帐户名称及其派生帐号 目标母帐户。

例如......

<?php  
//Chart of Accounts
$coa = array('Fixed Asset'=>array(150,array('Equimpent'=>array('computer','printer')),array('Furniture and Fixtures'=>array('desk','chair'))));
//global $coa;
$new_account ="Office File Cabinet";//from ajax post
$target_base_no ="150-2";//from ajax post
//won't know if or how many subkeys will may be included 
//but would result in something like...

$coa['unknown_parent_of_acct_no_150'][2][] = $new_account;
?>

我完全被封锁了...... 相反,我想我可能会问...... 如何确定帐户#150-2的帐户名称? 这是上下文中的COA数组。

Array
(
[Cash Bank] => Array
    (
        [0] => 100
        [1] => Checking
        [2] => Paypal
        [3] => Petty Cash
        [4] => Savings
        [5] => Deposits Pending
    )

[Accounts Receivable] => Array
    (
        [0] => 110
        [1] => AR-AlternaMart
    )

[Inventory] => Array
    (
        [0] => 120
    )

[Other Current Assets] => Array
    (
        [0] => 130
        [1] => Pre-Paid Hosting
    )

[Fixed Assets] => Array
    (
        [0] => 150
        [1] => Array
            (
                [Equipment] => Array
                    (
                        [0] => Computer
                        [1] => Printer
                    )

            )

        [2] => Array
            (
                [Furniture And Fixtures] => Array
                    (
                        [0] => Desk
                        [1] => Desk Chair
                    )

            )

    )

[Accumulated Depreciation] => Array
    (
        [0] => 160
        [1] => AD-Computer
        [2] => AD-Printer
        [3] => AD-Desk
        [4] => AD-Desk Chair
    )

[Accounts Payable] => Array
    (
        [0] => 200
        [1] => AP-Unearned Shipping
    )

[Credit Cards Payable] => Array
    (
        [0] => 210
        [1] => Wells Fargo Visa
    )

[Sales Tax Payable] => Array
    (
        [0] => 220
        [1] => CO
        [2] => 80227
        [3] => 80214
        [4] => IL
    )

[Accrued Payroll Taxes] => Array
    (
        [0] => 230
    )

[Other Current Liabilities] => Array
    (
        [0] => 240
    )

[Loans Payable] => Array
    (
        [0] => 270
    )

[Notes Payable] => Array
    (
        [0] => 280
    )

[Capital] => Array
    (
        [0] => 300
    )

[Drawing] => Array
    (
        [0] => 320
    )

[Sales] => Array
    (
        [0] => 400
    )

[Other Income] => Array
    (
        [0] => 401
        [1] => Shipping
    )

[Commissions] => Array
    (
        [0] => 402
        [1] => AlternaMart Commissions
    )

[Sales Discounts] => Array
    (
        [0] => 450
    )

[Sales Returns and Allowances] => Array
    (
        [0] => 451
    )

[Shipping Discounts] => Array
    (
        [0] => 452
    )

[Reimbursed Shipping] => Array
    (
        [0] => 453
    )

[Cost of Goods Sold] => Array
    (
        [0] => 500
        [1] => COGS Shipping
    )

[Expense] => Array
    (
        [0] => 600
        [1] => BSC Checking
        [2] => Paypal Transaction Fees
        [3] => Alternamart Transaction Fees
        [4] => Commissions Expense
        [5] => Interest Expense
        [6] => Internet Service
        [7] => Web Hosting
        [8] => Rent Expense
        [9] => Telephone
        [10] => Utilities
        [11] => Postage
        [12] => Office Supplies
        [13] => Miscellaneous Supplies
        [14] => Advertising
        [15] => Salaries And Wages
        [16] => Payroll Taxes
        [17] => Dues And Subscriptions
        [18] => Miscellaneous Expenses
        [19] => Legal And Accounting
        [20] => Insurance
        [21] => Vehicles Expense
        [22] => Depreciation Expense
        [23] => Travel And Entertainment
        [24] => Bad Debt Expense
        [25] => Ask Accountant
    )

[Ask Accountant] => Array
    (
        [0] => 900
    )

1 个答案:

答案 0 :(得分:0)

如果我做对了:...

$target_base_no拆分为 - $arr = explode('-', $target_base_no)$coa数组中搜索值= 150($ arr [0]),就像这样:

    foreach($coa as $row) {
       if ($arr[0] == $row[.....]
    }

使用第二个分割值($ arr [1])来标识要插入的位置。

已编辑:您应创建一个反向索引数组,以便直接访问正确的值。我们将nummeric值保存为键,将文本值保存为value(可以用作$coa数组的索引:

$index = array();
foreach($coa as $key => $value) {
     $index[$value[0]] = $key;
}

之后您只需访问您的数据$coa[$index[$arr[0]]](您应该检查该字段是否存在)