从Array(var_dump)到我的数组?

时间:2009-11-20 08:35:13

标签: php

我做了一个

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');

5 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

嗯,......?这样:

$myarray = $arrayX;

如果您想让它变得复杂,可以使用var_export

答案 2 :(得分:0)

我必须承认我不明白你的问题。

如果您需要$arrayX的副本,只需输入

即可
$myarray = $arrayX;

答案 3 :(得分: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()”函数会递归到数组中,并显示有关数组内对象的信息。如果你需要这样的功能,你应该扩展这个功能。

答案 4 :(得分:0)

如果我理解了,你正在做的是在某个网站上输出你的数组并尝试在另一个获取第一个网站的网站上再次创建它。 如果这是正确的并且您可以控制第一个站点(执行print_r的站点),我认为您应该使用serializeunserialize函数。