2016-05-23 14 views
0

.xmlファイルと.txtファイルの2つの別々のファイルからデータを取得するシナリオがあります。また、PHPを使用して2つの配列(各ファイルから1つ)を一致する値に結合しようとしていますそれぞれから。配列値のマージ

:私は、次の配列を取得することができています

<?php 
function dir_to_array($dir, $se) { 

    $result = array(); 
    $cdir = scandir($dir); 

    foreach ($cdir as $key => $value) { 

     $file_info = pathinfo($value); 

     if (! in_array($value, array(".", ".."))) { 
      if (is_dir($dir . DIRECTORY_SEPARATOR . $value)) { 

       $result[$value] = dir_to_array($dir . DIRECTORY_SEPARATOR . $value); 

      } else { 

       if ($file_info['extension'] == 'xml') { 

        if (isset($se) && $se !== 'undefined') { 
         if (strpos($value, $se) !== false) { 

          $result['xml'] = xmlToArray(file_get_contents($dir.'/'.$value)); 

         } 
        } 
       } 

       if ($file_info['extension'] == 'txt') { 

        $file = fopen($dir.'/'.$value, 'r'); 
        $count = 0; 

        while (($line = fgetcsv($file)) !== FALSE) { 
         // trying to match the structure of the above array ($result['xml']) 
         $result['txt']['records']['PositionRecords']['record'][$count++] = $line; 
        } 

        fclose($file); 
       } 

      } 
     } 
    } 

    return json_encode($result); 
} 

echo dir_to_array('path/to/something', $arg); 

私はそう私がこれまで一緒に入れている次のコードを使用して、前述のファイルのフォーマットを制御できません。 アレイ1:の.xml

[records] => Array 
(
    [PositionRecord] => Array 
    (
     [record] => Array 
     (
      [0] => Array 
      (
       [keyword] => "something", // Value to match 
       [position] => "1" 
      ), 
      ... 
     ) 
    ) 
) 

アレイ2:私はarray_mergeを用いて試みた

[records] => Array 
(
    [PositionRecord] => Array 
    (
     [record] => Array 
     (
      [0] => Array 
      (
       [keyword] => "something", 
       [position] => "1", 
       [volume] => "1000" 
      ), 
      ... 
     ) 
    ) 
) 

:私はこのような配列で終わるために一致keyword値にこれらの配列を結合する方法を

[records] => Array 
(
    [PositionRecord] => Array 
    (
     [record] => Array 
     (
      [0] => Array 
      (
       [0] => "something", // Value to match 
       [1] => "1000" 
      ), 
      ... 
     ) 
    ) 
) 

の.txtarray_merge_recursiveおよびarray_combineしかし、それらは、一方のアレイを他方に付加するだけであるように見える。私もthis answerthis answerを試しましたが、どちらも空の配列[]を返します。

答えて

1

手動でマージしたものの配列:

<?php 

$a['records']['PositionRecord']['record'][0] = ['keyword'=>"something","position"=>"1"]; 
$a['records']['PositionRecord']['record'][1] = ['keyword'=>"something2","position"=>"2"]; 
$b['records']['PositionRecord']['record'][0] = ["something","1000"]; 
$b['records']['PositionRecord']['record'][1] = ["something2","2000"]; 


for($i = 0, $c = count($a['records']['PositionRecord']['record']); $i < $c; $i ++) 
{ 
    $a['records']['PositionRecord']['record'][$i]['volume'] = $b['records']['PositionRecord']['record'][$i][1]; 
} 

echo "<pre>"; 
var_dump($a); 
echo "</pre>"; 

出力:

array(1) { 
    ["records"]=> 
    array(1) { 
    ["PositionRecord"]=> 
    array(1) { 
     ["record"]=> 
     array(2) { 
     [0]=> 
     array(3) { 
      ["keyword"]=> 
      string(9) "something" 
      ["position"]=> 
      string(1) "1" 
      ["volume"]=> 
      string(4) "1000" 
     } 
     [1]=> 
     array(3) { 
      ["keyword"]=> 
      string(10) "something2" 
      ["position"]=> 
      string(1) "2" 
      ["volume"]=> 
      string(4) "2000" 
     } 
     } 
    } 
    } 
} 
関連する問題