2009-11-20 3 views
2

I СделатьFron Array (var_dump) в мой массив?

echo '<pre>'; 
echo var_dump($arrayX); 
echo '</pre>' 

я получил результат:

array(6) { 
    [0]=> 
    string(9) "AAA" 
    [1]=> 
    string(13) "BBB" 
    [2]=> 
    string(8) "CCC" 
    [3]=> 
    string(8) "DDD" 
    [4]=> 
    string(8) "EEE" 
    [5]=> 
    string(13) "FFF" 
} 

Как я могу сделать это в новый массив То, что я хочу, чтобы получить arrayX в этом формате:

array('AAA', 'BBB' , 'CCC','DDD', 'EEE', 'FFF'); 

    $myarray = array('AAA', 'BBB' , 'CCC','DDD', 'EEE', 'FFF'); 
+0

Извините, но я не понимаю вопроса. Вывод, который вы хотите в '$ myarray', насколько я вижу, похож на тот, который у вас уже есть в' $ arrayX'. – phidah

ответ

3

Если вы хотите копию затем

$a = $arrayX; 

Однако если у вас есть, чтобы преобразовать его в какой-то формат строки, то лучший способ сделать это было бы это

$dump = var_export($a,true); 
eval('$b = ' . $dump . ';'); 

Или еще лучше

$s = serialize($a); 
$c = unserialize($s); 

Если это не сделать, то здесь, как разобрать формат vardump в вопросе

function parseValue($value) { 
    return substr(preg_replace('/\s*[a-z]+\([0-9]+\)\s+"(.*)/','\\1',$value),0,-2); 
} 
function parseIndex($index) { 
    return preg_replace('/[^[]*\[([0-9]+)\].*/','\\1',$index); 
} 
function parseVardump($dump) { 

$lines = explode("\n",$dump); 

foreach ($lines as $line) { 
    switch (true) { 
    case preg_match('/array\([0-9]+\) {/',$line) : 
    break; 
    case preg_match('/\[[0-9]+\]=>/',$line) : 
     // end previous value 
     if (isset($index)) { 
     $ar[$index] = parseValue($value); 
     } 
     $index = parseIndex($line); 
     $value = ''; 
    break; 
    case preg_match('/}$/',$line) : 
     if (isset($index)) { 
     $ar[$index] = parseValue($value); 
     } 
    break; 
    default: 
     $value .= $line . "\n"; 
    break; 
    } 
} 
return $ar; 
} 

$a = array("AAA\n", 'BBB' , 'CCC','DDD', 'EEE', 'FFF'); 

ob_start(); 
var_dump($a); 
$dump = ob_get_contents(); 
ob_end_clean(); 

$ar = parseVardump($dump); 
+0

Это отнюдь не общий парсер var_dump, это довольно специфично –

+0

Да, может быть, кто-то сочтет это полезным. Это своего рода массив, специфический и имеет только плоские массивы, а не многомерные. –

0

Должен признаться, я не понимаю ваш вопрос.

Если вы хотите получить копию $arrayX, просто введите

$myarray = $arrayX; 
1

EHM, ...? это:

$myarray = $arrayX; 

, если вы хотите сделать его сложным, вы можете использовать var_export

+0

большое спасибо – kn3l

0

вы могли бы право простая функция для вывода в формате, который вы хотите. как это одна:

<?php 
function dump_array($ar) { 
    $output = 'array('; 
    $lastIndex = count($ar) - 1; 
    $counter = 0; 
    foreach($ar as $key => $value) { 
     $output .= (is_string($value) ? "'{$value}'" : $value) . ($counter++ < $lastIndex ? ', ' : ''); 
    } 
    $output .= ')'; 
    return $output; 
} 
?> 

хотя помните, что функция встроенного «var_dump()» рекурсивно в массивы и отображает информацию об объектах внутри массива. если вам нужна такая функциональность, вы должны расширить эту функцию, чтобы сделать это.

0

Если я понимаю, то, что вы делаете, выводит ваш массив на какой-либо веб-сайт и пытается создать его снова на другом сайте, который извлекает первый. Если это правильно, и вы контролируете первый сайт (тот, который делает print_r), я думаю, вы должны использовать функции serialize и unserialize.

Смежные вопросы