Как создать вложенные массивы на основе префиксов строки? - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть одномерный массив с (пример):

{
    ["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"
    }
}

Как это сделать в общем виде с этим шаблоном (имя_отца)?

Спасибо, Celso

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011
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;
}
1 голос
/ 17 ноября 2011
$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

Кажется довольно общим для вашей цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...