【问题标题】:How to create sub arrays based on prefixes of string?如何根据字符串的前缀创建子数组?
【发布时间】:2011-11-17 14:10:12
【问题描述】:

我有一个带有(示例)的一维数组:

{
    ["Pagamento_valor_liquido"]=> string(3) "111"
    ["Pagamento_valor_bruto"]=> string(3) "222"
    ["TipoPagamento_id"]=> string(3) "333"
    ["TipoPagamento_descricao"]=> string(3) "444"
}

我需要帮助将其转换为两个子数组:

{
    ["Pagamento"]=> array(2) {
        ["valor_liquido"]=> string(3) "111"
        ["valor_bruto"]=> string(3) "222"
    }
    ["TipoPagamento"]=> array(2) {
        ["id"]=> string(3) "333"
        ["valor_bruto"]=> string(3) "444"
    }
}

如何以通用方式使用此模式 (Father_son_name)?

谢谢, 塞尔索

【问题讨论】:

  • 很难知道你在做什么。

标签: php arrays string


【解决方案1】:
function transform($array) {
    $return = Array();
    foreach($array as $keyname => $value) {
        list($key, $key2) = explode("_", $keyname, 2);
        if(!isset($return[$key])) $return[$key] = Array();
        $return[$key][$key2] = $value;
    }
    return $return;
}

【讨论】:

    【解决方案2】:
    $array = array("Pagamento_valor_liquido" => "111", "Pagamento_valor_bruto" => "222", "TipoPagamento_id" => "333", "TipoPagamento_descricao" => "444");
    
    $result = array();
    foreach ($array as $k => $v) {
        $name = explode('_', $k);
        $newkey = array_shift($name);
        $newname = implode('_', $name);
        $result[$newkey][$newname] = $v;
    }
    var_export($result);
    

    观看实际操作here

    对于您的目的来说似乎很通用。

    【讨论】:

    • 很好,但是数组的值('111','222','333','444')在哪里?
    • 没有这些值,当$result[$newkey] 不存在时,将在第一次通过时生成警告。
    • 哇!抱歉,我在分配给$result[$newkey][$newvalue] 时混淆了$k$v。 FTFY。
    • 嗯,我记得error_reporting(E_ALL) 如果您尝试在未初始化的变量上设置键,PHP 会生成通知。但是我只是在 PHP 5.3.6 上尝试过,它似乎不再生成通知。遗憾的是 PHP 随着年龄的增长变得越来越放松。删除了反对票。
    • PHP 5.2 相同。可能,在 PHP 4 中它是一个E_NOTICE,但我不记得它说你是否确定正确。也许...... PHP 是相当该死的宽容,- 是的 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多