2016-04-15 53 views
0

我经常必须从大数组中挑选某些值。虽然我理解我这样做的方式可能不是绝对正确的方式,但在这个系统中,我应该这样做。PHP将数组递归地导出为'水平'代码

实施例(简化的)阵列:

$data = array (
    'api' => 
    array (
    'update_id' => 94594942, 
    'message' => 
    array (
     'message_id' => 141, 
     'from' => 
     array (
     'id' => 1251597, 
     'first_name' => 'Testuser', 
    ), 
     'chat' => 
     array (
     'id' => '124630', 
     'title' => 'TESTGROUP', 
     'type' => 'group', 
    ), 
     'date' => '1460712410', 
     'text' => 'tryout', 
     'valid' => true, 
    ), 
    'list' => 
    array (
     0 => 'one', 
     1 => 'two', 
     2 => 'three', 
    ), 
), 
); 

我所需的导出/转储视为纯字符串:

$result = " 
    data['api']['update_id'] = 94594942; 
    data['api']['message']['message_id'] = 141; 
    data['api']['message']['from']['id'] = 1251597; 
    data['api']['message']['from']['first_name'] = 'Testuser'; 
    data['api']['message']['chat']['id'] = '124630'; 
    data['api']['message']['chat']['title'] = 'TESTGROUP'; 
    data['api']['message']['chat']['type'] = 'group'; 
    data['api']['message']['date'] = '1460712410'; 
    data['api']['message']['text'] = 'tryout'; 
    data['api']['message']['valid'] = true; 
    data['api']['list'][] = 'one'; 
    data['api']['list'][] = 'two'; 
    data['api']['list'][] = 'three'; 
"; 

我称它是 '水平' 数组表示 - 我不很清楚它的官方名称是什么。

我试着用json_encode()和var_export()转换数组,并手动解析它,但它似乎不是正确的方式来做到这一点,并给我头痛。有小费吗?

+0

基本上你是想你多转换梦诗离子数据记录到单个记录?您应该创建变换器类,将您的结构化数据映射到单维度键 - >值数组。 –

+0

我已更新第二代码部分。我的结果应该是一个纯文本字符串。我想你可以把它称为'var_export($ data,true);'用不同的模板。 – EDP

+1

你到底在做什么?为什么首先需要出口?你稍后再导入它吗? –

回答

1

您可以使用下面的功能:

<?php 
 
$data = array (
 
    'api' => 
 
    array (
 
    'update_id' => 94594942, 
 
    'message' => 
 
    array (
 
     'message_id' => 141, 
 
     'from' => 
 
     array (
 
     'id' => 1251597, 
 
     'first_name' => 'Testuser', 
 
    ), 
 
     'chat' => 
 
     array (
 
     'id' => '124630', 
 
     'title' => 'TESTGROUP', 
 
     'type' => 'group', 
 
    ), 
 
     'date' => '1460712410', 
 
     'text' => 'tryout', 
 
     'valid' => true, 
 
    ), 
 
    'list' => 
 
    array (
 
     0 => 'one', 
 
     1 => 'two', 
 
     2 => 'three', 
 
    ), 
 
), 
 
); 
 

 
function convertHorizontal($parent, $source) { 
 
    if (!is_array($source)) { 
 
     return "$parent = " . var_export($source, true) . "\n"; 
 
    } 
 
    
 
    $result = ''; 
 
    foreach($source as $key => $value) { 
 
     $result .= convertHorizontal("{$parent}[\"$key\"]", $value); 
 
    } 
 

 
    return $result; 
 
} 
 

 
$result = convertHorizontal("\$data", $data); 
 
print $result; 
 
$result = convertHorizontal("\$data", $data); 
 
print $result

,你会得到以下结果:

$data["api"]["update_id"] = 94594942 
 
$data["api"]["message"]["message_id"] = 141 
 
$data["api"]["message"]["from"]["id"] = 1251597 
 
$data["api"]["message"]["from"]["first_name"] = 'Testuser' 
 
$data["api"]["message"]["chat"]["id"] = '124630' 
 
$data["api"]["message"]["chat"]["title"] = 'TESTGROUP' 
 
$data["api"]["message"]["chat"]["type"] = 'group' 
 
$data["api"]["message"]["date"] = '1460712410' 
 
$data["api"]["message"]["text"] = 'tryout' 
 
$data["api"]["message"]["valid"] = true 
 
$data["api"]["list"]["0"] = 'one' 
 
$data["api"]["list"]["1"] = 'two' 
 
$data["api"]["list"]["2"] = 'three'

+0

正是我想要的!只有五行工作代码相比,我自己的页面长度的不可持续的垃圾。 – EDP