2017-10-13 21 views
3

私はPHPを初めて使用しており、配列でグループ化するのに問題があります。 実際に、私は患者の多次元配列(「id」)を持っています。病院の滞在(「開始」は滞在日です)には、それぞれの滞在ごとに診断があります。列「ID」と「始まり」の瞬間から PHPで多次元配列でグループ化し、コンマで結果を連結

$data = array (
    0 =>array("id"=>1, "begin"=>"01/01","diagnostic"=>"a"), 
    1 =>array("id"=>1, "begin"=>"01/01","diagnostic"=>"b"), 
    2 =>array("id"=>1, "begin"=>"01/01","diagnostic"=>""), 
    3 =>array("id"=>1, "begin"=>"02/02","diagnostic"=>"a"), 
); 

は、私がカンマで「診断」の値を連結したいのですが、同じです。

$output = array (
    0 =>array("id"=>1, "begin"=>"01/01","diagnostic"=>"a, b"), 
    1 =>array("id"=>1, "begin"=>"02/02","diagnostic"=>"a"), 
); 

月の誰かが私を助けてください: 私はこのような何かを持っていると思いますか? ありがとうございます

+2

読むを[配列](HTTPについて:// PHP .net/manual/en/language.types.array.php)、[角括弧の構文](http://php.net/manual/en/language.types.array.php#language)を使用してその値にアクセスする方法.types.array.syntax.accessing)次に、['foreach'](http ://php.net/manual/en/control-structures.foreach.php)あなたの想像力を使いましょう。 PHP関数['implode()'](http://php.net/manual/en/function.implode.php)は、ある時点で助けになるかもしれません(ただし、大きなパズルではちょっとしたことです)。その他の便利な機能は['isset()](http://php.net/manual/en/function.isset.php)です。 – axiac

+3

[ようやく]ようこそ。サイトの[ツアー]に行って、[ask]と[mcve]の作成方法を読んでください。 [so]はコーディングサービスではありません。あなたが試したことと、助けを得る機会を最大限に生かすために立ち往生した場所を示してください。 – axiac

+0

さて、私は少し過度だったと認めます...ありがとうございます – m4gn4n

答えて

0

あなたは完全な解決策を求めています。

ので、ここでそれを成し遂げる方法についての私の迅速なテイクです:

http://sandbox.onlinephpfunctions.com/code/eb4fef6146b77fb7ff157790046c79750ef90cdb

<?php 
$data = [ 
    0 =>array("id"=>1, "begin"=>"01/01","diagnostic"=>"a", "procedure" => "x"), 
    1 =>array("id"=>1, "begin"=>"01/01","diagnostic"=>"b", "procedure" => ""), 
    2 =>array("id"=>1, "begin"=>"01/01","diagnostic"=>"a", "procedure" => "y"), 
    3 =>array("id"=>1, "begin"=>"02/02","diagnostic"=>"a", "procedure" => "z"), 
]; 

// create an empty array to hold results 
$result = []; 

// iterate through each entry of the original $data 
foreach($data as $entry){ 
    // create a temporary array index, that will be unique across the entries conditions (begin, id) 
    $tempId = $entry['id'] . '-' . $entry['begin']; 

    // create and append entries to diagnostic and procedure 
    $result[$tempId]['diagnostic'][] = $entry['diagnostic']; 
    $result[$tempId]['procedure'][] = $entry['procedure']; 

    // copy data that is identical 
    $result[$tempId]['begin'] = $entry['begin']; 
    $result[$tempId]['id'] = $entry['id']; 
} 

// iterate through entries and implode unique, not empty elements of diagnostic and procedure array with a comma 
foreach($result as &$entry){ 
    $entry['diagnostic'] = implode(',', array_unique(array_filter($entry['diagnostic']))); 
    $entry['procedure'] = implode(',', array_unique(array_filter($entry['procedure']))); 
} 
print_r($result); 

上記生成されます。

Array 
(
    [1-01/01] => Array 
     (
      [diagnostic] => a,b 
      [procedure] => x,y 
      [begin] => 01/01 
      [id] => 1 
     ) 

    [1-02/02] => Array 
     (
      [diagnostic] => a 
      [procedure] => z 
      [begin] => 02/02 
      [id] => 1 
     ) 

) 
+0

ありがとうございました...それはトリックです!さて、私は少し過剰だったことを知って、申し訳ありません... – m4gn4n

+0

希望これは助けた。他の人が言ったように。あなたの想像力を使って、コードを試してみてください。あなたがもっと実験するにつれ、あなたはより良くなるでしょう。 –

関連する問題