2013-06-28 2 views
1

Итак, вот ситуация, в которой я застрял. Я пытаюсь импортировать многомерный массив в PHP из файла javascript (http://roosters-hd.stenden.com/js/data_autogen.js), который я импортирую в виде строки. Это выглядит следующим образом:Строка для многомерного массива в PHP

locgrouparray[i++] = new locgroup("E0.090 (33)", "E0.090 (33)", "#SPLUS6ECDBE", "MET"); 
locgrouparray[i++] = new locgroup("E0.092 (28)", "E0.092 (28)", "#SPLUS6ECDBF", "(none)"); 
locgrouparray[i++] = new locgroup("E0.111 (30)", "E0.111 (30)", "#SPLUS6ECDC0", "(none)"); 
locgrouparray[i++] = new locgroup("E0.113 (30)", "E0.113 (30)", "#SPLUS6ECDC1", "(none)"); 
etc. 

в массив PHP:

Array (
    [0] => Array (
     [Class] => "E0.090 (33)" 
     [ClassID] => "#SPLUS6ECDBE"" 
     [type] => "MET" 
    ),  
    [1] => Array (
     [Class] => "E0.090 (28)" 
     [ClassID] => "#SPLUS6ECDBF"" 
     [type] => "(none)" 
    ), 
    [2] => Array (
     [Class] => "E0.111 (30)" 
     [ClassID] => "#SPLUS6ECDC0"" 
     [type] => "(none)" 
    ), 
    etc. 
) 

Что бы наиболее эффективным способом, чтобы импортировать этот многомерный массив?

+0

Где этот файл вы импортируете данные? Я уверен, что вы можете использовать комбинацию ['file'] (http://php.net/file) и некоторые другие функции, чтобы создать цикл для этого! – Dale

+2

Непонятно, что должно быть массивом здесь и как вы хотите, чтобы результат выглядел. Просьба уточнить. – deceze

+0

Его javascript, вот где: http://roosters-hd.stenden.com/js/data_autogen.js – JasperJ

ответ

1

Вы могли бы использовать что-то вроде:

$data = file_get_contents('http://roosters-hd.stenden.com/js/data_autogen.js'); 
$matches = $outArray = array(); 

preg_match_all('#locgroup\("(.*?)"\);#', $data, $matches); 

foreach($matches[1] as $arr) { 
    array_push($outArray, explode('", "', $arr)); 
} 

print_r($outArray); 

Выход: http://pastebin.com/raw.php?i=ejxpUJy6

Update: Если вы хотите, чтобы ваш массив использовать ключевые имена, как показано на обновленной вопрос, просто изменить цикл foreach следующим образом:

foreach($matches[1] as $arr) { 
    $tmp = explode('", "', $arr);   
    array_push($outArray, array(
     'Class' => $tmp[0], 
     'ClassID' => $tmp[2], 
     'type' => $tmp[3], 
    )); 
} 

Выход: http://pastebin.com/raw.php?i=ek0PRr0r

+0

Работает отлично, спасибо! – JasperJ

1
$data = <<<DATA 
locgrouparray[i++] = new locgroup("E0.090 (33)", "E0.090 (33)", "#SPLUS6ECDBE", "MET"); 
locgrouparray[i++] = new locgroup("E0.092 (28)", "E0.092 (28)", "#SPLUS6ECDBF", "(none)"); 
locgrouparray[i++] = new locgroup("E0.111 (30)", "E0.111 (30)", "#SPLUS6ECDC0", "(none)"); 
locgrouparray[i++] = new locgroup("E0.113 (30)", "E0.113 (30)", "#SPLUS6ECDC1", "(none)"); 
DATA; 

preg_match_all('/locgroup\("([^"]+)",\s*"[^"]+",\s*"([^"]+)",\s*"([^"]+)"\)/i', $data, $matches, PREG_SET_ORDER); 
$parsedData = array_map(function (array $m) { return array('Class' => $m[1], 'ClassId' => $m[2], 'type' => $m[3]); }, $matches); 

var_dump($parsedData); 
+0

+1 для более сложного решения 'array_map'. ;-) – eyecatchUp