2014-02-02 4 views
0

Я делаю быстрый PHP-проект, который берет информацию из другого файла и читает ее и собирает информацию. Сайты хранит информацию, как это:Как читать массивы PHP?

Имя файла: .ipn

Array 
(
    [mc_gross] => 10.00 
    [ipn_track_id] => 731ea17d 
) 
Array 
(
    [mc_gross] => 10.00 
    [ipn_track_id] => 523fd7886 
) 
Array 
(
    [mc_gross] => 10.00 
    [ipn_track_id] => 523fd7886 
) 

Как создать PHP скрипт, который принимает .ipn файл и суммирует общую [mc_gross], который в этом случае будет 30.00?

+2

является то, что точное содержимое .ipn файла? – thpl

+0

Вы должны сохранить массив как JSON. 'json_encode ($ array);' и 'json_decode ($ file);'. – Sam

+0

Что генерирует '.ipn'? Это очень нетрадиционный формат и не очень дружелюбный. Вы можете * анализировать его, но вам лучше работать с XML, JSON или YML – sjagr

ответ

2

Это должно работать -

<?php 
     $input = file_get_contents("filename.ext"); 
     $regexp = "/\[mc_gross\][ ]*=>[ ]*([0-9]+(?:\.[0-9]+)?)/"; 
     $sum = 0; 
     if(preg_match_all($regexp, $input, $matches, PREG_SET_ORDER)){ 
      foreach($matches as $match) { 
       $sum += $match[1]; 
      } 
      unset($match); 
     } 
     echo "Sum ".$sum; 

/* 
    var_dumping the matches - 
    array 
     0 => 
     array 
      0 => string '[mc_gross] => 10.00' (length=19) 
      1 => string '10.00' (length=5) 
     1 => 
     array 
      0 => string '[mc_gross] => 10.00' (length=19) 
      1 => string '10.00' (length=5) 
     2 => 
     array 
      0 => string '[mc_gross] => 10.00' (length=19) 
      1 => string '10.00' (length=5) 
*/ 

?> 
+0

Что бы я напечатал внутри регулярного выражения, если бы хотел распечатать массив строк, который будет называться [mc_name] каждый раз. –

+0

mc_name вместо mc_gross ?? просто замените mc_gross на mc_name Как это ** "/ \ [mc_name \] [] * => [] * ([0-9] + (?: \. [0-9] +)?) /" **. – Kamehameha

+0

Кроме того, если вы имеете [mc_gross] и [mc_name] в разных массивах и хотите найти сумму обеих записей, вы можете использовать это ** "/ \ [(? :(?: mc_gross) | (?: Mc_name)) \] [] * => [] * ([0-9] + (?: \. [0-9] +)?)/"** – Kamehameha

0

Сначала сохраните массив в файлах, используя serialize.

$string = serialize($array); 
file_put_contents('myfile.ipn',serialize($string)); 

Затем прочитать файл с помощью unserialize и file_get_contents.

$content = file_get_contents('myfile.ipn'); 
$array = unserialize($content); 

Надеюсь, это поможет!

+1

Что делать, если OP не влияет на то, как генерируется файл, который он хочет прочитать? – thpl

0

ли это:

$lines = array_chunk(file('items.ipn'),5); 
$sum = 0; 
foreach($lines as $line){ 
    $sum += floatval(end(explode('=>',$line[2]))); 
} 
print $sum; 
// 30 
Смежные вопросы