2016-10-25 7 views
0
$temp = []; 
$array = []; 

$array[] = array("parent_id" => 1, "parent" => "Mr & Mrs Lacey", "child_firstname" => "callum", "child_lastname" => "lacey"); 
$array[] = array("parent_id" => 2, "parent" => "Mr and Mrs Lacey", "child_firstname" => "daniel", "child_lastname" => "lacey"); 
$array[] = array("parent_id" => 3, "parent" => "Mr & Mrs O'brian", "child_firstname" => "bruce", "child_lastname" => "O'brian"); 
$array[] = array("parent_id" => 4, "parent" => "Mr & Mrs Obrian", "child_firstname" => "dave", "child_lastname" => "O'brian"); 


function stripString($input){ 
    $input = preg_replace("/[^a-zA-Z]+/", "", $input); 
    return $input; 
} 

foreach($array as $item){ 
    $input = str_replace(" and ","", $item["parent"]); 
    $parent = stripString($input); 
    $child_firstname = stripString($item["child_firstname"]); 
    $child_lastname = stripString($item["child_lastname"]); 
    $temp[] = array("parent_id" => $item["parent_id"], 
        "parent" => $parent, 
        "child_firstname" => $child_firstname, 
        "child_lastname" => $child_lastname); 
} 

印刷アウトと重複両親停止するには:私はプリントアウトできるようにしたいどのようなマージ/グループの配列の値とまったく同じフルネーム

Array 
(
    [0] => Array 
     (
      [parent_id] => 1 
      [parent] => MrMrsLacey 
      [child_firstname] => callum 
      [child_lastname] => lacey 
     ) 

    [1] => Array 
     (
      [parent_id] => 2 
      [parent] => MrMrsLacey 
      [child_firstname] => daniel 
      [child_lastname] => lacey 
     ) 

    [2] => Array 
     (
      [parent_id] => 3 
      [parent] => MrMrsObrian 
      [child_firstname] => bruce 
      [child_lastname] => Obrian 
     ) 

    [3] => Array 
     (
      [parent_id] => 4 
      [parent] => MrMrsObrian 
      [child_firstname] => dave 
      [child_lastname] => Obrian 
     ) 
) 

は:

(にする必要があり duplicated_idニーズを)
Array (
    [0] => Array (
      [parent_id] => 1 
      [duplicated_id] => 2 
      [parent] => MrMrsLacey 
      [0] => Array (
       [child_firstname] => callum 
       [child_lastname] => lacey 
      ) 
      [1] => Array (
       [child_firstname] => daniel 
       [child_lastname] => lacey 
      ) 
     ) 

    [1] => Array (
      [parent_id] => 3 
      [duplicated_id] => 4 
      [parent] => MrMrsObrian 
      [0] => Array (
       [child_firstname] => bruce 
       [child_lastname] => Obrian 
      ) 
      [1] => Array (
       [child_firstname] => dave 
       [child_lastname] => Obrian 
      ) 
     ) 
) 

答えて

1

あなたは、インデックスベースの配列に値を追加し、それをリセットすることができます。Eval

<?php 

$temp = []; 
$array = []; 

$array[] = array("parent_id" => 1, "parent" => "Mr & Mrs Lacey", "child_firstname" => "callum", "child_lastname" => "lacey"); 
$array[] = array("parent_id" => 2, "parent" => "Mr and Mrs Lacey", "child_firstname" => "daniel", "child_lastname" => "lacey"); 
$array[] = array("parent_id" => 3, "parent" => "Mr & Mrs O'brian", "child_firstname" => "bruce", "child_lastname" => "O'brian"); 
$array[] = array("parent_id" => 4, "parent" => "Mr & Mrs Obrian", "child_firstname" => "dave", "child_lastname" => "O'brian"); 


function stripString($input){ 
    $input = preg_replace("/[^a-zA-Z]+/", "", $input); 
    return $input; 
} 

foreach($array as $item){ 
    $input = str_replace(" and ","", $item["parent"]); 
    $parent = stripString($input); 
    $child_firstname = stripString($item["child_firstname"]); 
    $child_lastname = stripString($item["child_lastname"]); 

    if(!array_key_exists($parent, $temp)) { //Add only first index details to array 
     $temp[$parent]['parent_id'] = $item["parent_id"]; 
     $temp[$parent]['parent'] = $parent; 
    } else { 
     $temp[$parent]['duplicated_id'] = $item["parent_id"]; 
    } 

    // Remove unwanted indices 
    $temp[$parent][] = array("child_firstname" => $child_firstname, 
     "child_lastname" => $child_lastname);   

} 

$temp = array_values($temp); // Reset index 

print_r($temp); 

プリント:

Array 
(
    [0] => Array 
     (
      [parent_id] => 1 
      [parent] => MrMrsLacey 
      [0] => Array 
       (
        [child_firstname] => callum 
        [child_lastname] => lacey 
       ) 

      [duplicated_id] => 2 
      [1] => Array 
       (
        [child_firstname] => daniel 
        [child_lastname] => lacey 
       ) 

     ) 

    [1] => Array 
     (
      [parent_id] => 3 
      [parent] => MrMrsObrian 
      [0] => Array 
       (
        [child_firstname] => bruce 
        [child_lastname] => Obrian 
       ) 

      [duplicated_id] => 4 
      [1] => Array 
       (
        [child_firstname] => dave 
        [child_lastname] => Obrian 
       ) 

     ) 

) 
+0

更新された質問をチェックするには、 'duplicated_ids'を表示する必要があります –

+0

@ChrisBeckettチェックアウト。更新しました!しかし、複数のidが重複している場合はどうなりますか?配列やコンマで区切って? – Thamilan

+0

あなたは何をお勧めしますか?配列やカンマ区切りの方が良いでしょうか? –

0

あなたが(関係ありません)親IDで新しい配列のインデックスを作成して満足している場合は、このような何かを行うことができます。

foreach($array as $delta => $item){ 
    [...] 
    $temp[$item['parent_id']]['parent_id'] = $item["parent_id"]; 
    $temp[$item['parent_id']]['parent'] = $item["parent"]; 

    $temp[$item['parent_id']][$delta] = array(
    "child_firstname" => $child_firstname, 
    "child_lastname" => $child_lastname); 
); 
} 

この親のparent_idparentのキーが繰り返し上書きされることになりますが、それは問題ではありません。結果はあなたが望むものでなければなりません。

しかし、可能であれば、簡単な反復を可能にするために、自分のキーの下に子を入れたいと思います。子供を反復する瞬間には、各キーをテストして、数値であることを確認する必要があります。

+0

私の更新された質問をチェックするには、 'duplicated_ids'も表示する必要があります –

+0

' duplicated_ids 'は何を表していますか?私はその説明からそれを理解することはできません。 – moopet

関連する問題