2017-09-09 5 views
0

json_decode(string、true)の後には、以下の連想多次元配列を使用できます。連想配列の数値キーを対応する値に置き換える方法

Array 
(
    [statusCode] => 200 
    [data] => Array 
     (
      [objects] => Array 
       (
        [0] => deals 
        [1] => contacts 
        [2] => accounts 
       ) 

      [deals] => Array 
       (
        [0] => dealName 
        [1] => ApprovedBy 
        [2] => ApprovedDate 
        [3] => CloseDate 
       ) 

      [contacts] => Array 
       (
        [0] => contectName 
        [1] => email 
        [2] => firstName 
        [3] => lastName 
       ) 

      [accounts] => Array 
       (
        [0] => accountName 
        [1] => creationDate 
        [2] => ApprovedDate 
        [3] => accountNumber 
       ) 
     ) 

) 

それは次のように配列に対応する値を持つ数字キーを交換したい:私はこれまで試したどのような

[deals] => deals 
[contacts] => contacts 
[accounts] => accounts 

$finalIOArray = array(); 
$integrationObjectsArray = $response['data']['objects']; 
foreach($integrationObjectsArray as $integrationObject){ 
    $finalIOArray[$integrationObject] = $integrationObject; 
} 

これは、メインデータアレイにのみオブジェクト配列のためのものです。しかし、メインデータ配列内のすべてのサブ配列のキーをキーに置き換える必要があります。あなたはこの

foreach($arr["data"] as $key=>&$data){ 
    $new = array(); 
    foreach($data as $key2=>$value){ 
    $new[$value] = $value; 
    } 
    $data = $new; 
} 
print_r($arr); 

ライブデモのように行うことができます

+1

あなたは何を試してみましたか?これは私のサイト用の私のものです。 – ArtisticPhoenix

+0

私がしたことは: $ finalIOArray = array();$ integrationObjectsArray = $ response ['data'] ['objects']; foreach($ integrationObjectとしての$ integrationObjectsArray){ $ finalIOArray [$ integrationObject] = $ integrationObject; } しかし、私がこの方法に従えば、私は手動でデータアレイの各配列を扱わなければなりません。 –

+0

この情報で元の質問を編集してください。 –

答えて

2
+0

これは必須出力ではありません。 –

+0

@AliMalik:これが欲しい:https://eval.in/858593 – C2486

+0

はい、このようなものです。 これは、メインのデータ配列を操作するアイデアを私に教えてくれました。私はそれを試してみましょう。 –

1

私はスーツにあなたのニーズを自分のコードを修正し、それを試してみてください。

$data = []; 
foreach($arr["data"] as $key => $example) { 
    $new = []; 
    foreach($example as $value) { 
     $new[$value] = $value; 
    } 
    $data[$key] = $new; 
} 
$arr["data"] = $data; 
print_r($arr); 
+0

元のキーをオブジェクト、取引、連絡先、アカウントのように保つために$ keyを追加しました。 –

2

は、ここでの問題

function updateArray(array $data) 
{ 
    $result = array(); 
    foreach ($data as $key => $value) { 
     if (is_integer($key) && is_string($value)) { // key is integer and value is string 
      $result[$value] = $value; // update the key 
     } elseif (is_array($value)) { // value is array 
      $result[$key] = updateArray($value); // recurse 
     } else { 
      $result[$key] = $value; // leave key/value alone 
     } 
    } 
    return $result; 
} 

print_r(updateArray($arr)); 
+0

私はこれを試してみましょう、エレガントなようです。 –

0

これは、提供する上で他よりクリーンで、より直接的な方法であると再帰的なソリューションです。 array_combineを使用して、サブ配列の値を使用してキーを一括して再割り当てします。

foreachを使用する私の方法では、$dataより前の&は「参照渡し」を意味します。 http://php.net/manual/en/language.references.pass.phpこれにより、特定の深い要素につながるキーを書き込まずに元の配列データを変更することができます。

コード:

$arr = Array 
(
    "statusCode" => 200, 
    "data" => Array 
     (
      "objects" => Array 
       (
        "0" => deals, 
        "1" => contacts, 
        "2" => accounts 
       ), 

      "deals" => Array 
       (
        "0" => dealName, 
        "1" => ApprovedBy, 
        "2" => ApprovedDate, 
        "3" => CloseDate 
       ), 
      "contacts" => Array 
       (
        "0" => contectName, 
        "1" => email, 
        "2" => firstName, 
        "3" => lastName 
       ), 
      "accounts" => Array 
       (
        "0" => accountName, 
        "1" => creationDate, 
        "2" => ApprovedDate, 
        "3" => accountNumber 
       ) 
     ) 
); 
foreach($arr["data"] as &$data){ 
    $data=array_combine($data,$data); 
} 
var_export($arr); 

が出力:

array (
    'statusCode' => 200, 
    'data' => 
    array (
    'objects' => 
    array (
     'deals' => 'deals', 
     'contacts' => 'contacts', 
     'accounts' => 'accounts', 
    ), 
    'deals' => 
    array (
     'dealName' => 'dealName', 
     'ApprovedBy' => 'ApprovedBy', 
     'ApprovedDate' => 'ApprovedDate', 
     'CloseDate' => 'CloseDate', 
    ), 
    'contacts' => 
    array (
     'contectName' => 'contectName', 
     'email' => 'email', 
     'firstName' => 'firstName', 
     'lastName' => 'lastName', 
    ), 
    'accounts' => 
    array (
     'accountName' => 'accountName', 
     'creationDate' => 'creationDate', 
     'ApprovedDate' => 'ApprovedDate', 
     'accountNumber' => 'accountNumber', 
    ), 
), 
) 

それとも、機能的な反復を好むならば、これは同じ出力を提供します。

$arr["data"]=array_map(function ($a){return array_combine($a,$a);},$arr["data"]); 
var_export($arr); 
+0

ニース&簡潔です。変数$ dataを列挙する前にアンパサンド記号について少し説明できますか?ありがとう –

関連する問題