2017-03-14 21 views
3

最後の配列番号から[headers]配列の値を取得しようとしています。私はforeachループで使う変数にこれらの値を代入したいと思います。 [ヘッダー]の配列番号は、他の[ヘッダー]配列と異なることがあります。以下でこれを見ることができます。多次元配列から特定の値の最高値を返す

最初の[headers]アレイは、[0] => Array[1] Arrayの下に 'From'と 'Date'があります。 2番目の[headers]配列には[11] => Arrayおよび[12] => Arrayの下に 'From'および 'Date'があります。

は、これまでのところ私は使用して最初に一致した値を取得するために管理している:

 $arr = array($array);    
     $arrIt = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)); 

     foreach ($arrIt as $sub) { 
      $subArray = $arrIt->getSubIterator(); 
      if ($subArray['name'] === 'From') { 
       $outputArray = iterator_to_array($subArray); 
      } 
     } 

この配列を使用して:あなたは、配列のインデックスを再作成するためにarray_valuesを使用することができます

Array 
(
    [id] => 15acc078ff3c13bb 
    [historyId] => 30098 
    [messages] => Array 
     (
      [0] => Array 
       (
        [id] => 15acc078ff3c13bb 
        [threadId] => 15acc078ff3c13bb 
        [labelIds] => Array 
         (
          [0] => Label_335 
          [1] => IMPORTANT 
          [2] => Label_332 
          [3] => CATEGORY_PERSONAL 
          [4] => INBOX 
         ) 

        [snippet] => ok 
        [historyId] => 30084 
        [internalDate] => 1489481730000 
        [payload] => Array 
         (
          [mimeType] => multipart/alternative 
          [filename] => 
          [headers] => Array 
           (
              [0] => Array 
               (
                [name] => From 
                [value] => [email protected] 
               ) 
              [1] => Array 
               (
                [name] => Date 
                [value] => Tue, 14 Mar 2017 15:55:30 +0700 
               ) 
             ) 
     ) 
      [1] => Array 
       (
        [id] => 15acc09c623d48dd 
        [threadId] => 15acc078ff3c13bb 
        [labelIds] => Array 
         (
          [0] => SENT 
         ) 

        [snippet] => test On Tue, Mar 14, 2017 at 3:55 PM, test user wrote: > ok 
        [historyId] => 30098 
        [internalDate] => 1489481877000 
        [payload] => Array 
         (
          [partId] => 
          [mimeType] => text/plain 
          [filename] => 
          [headers] => Array 
           (
              [11] => Array 
               (
                [name] => From 
                [value] => [email protected] 
               ) 
              [12] => Array 
               (
                [name] => Date 
                [value] => Tue, 14 Mar 2017 15:57:57 +0700 
               ) 
             ) 
           ) 
         ) 
       ) 
     ) 

答えて

0

すべてのヘッダーを配列の構造で繰り返すには、次の操作を行います。最後のものを見つけることは簡単ではありません。

foreach($yourArray['messages'] as $messages){ 
    foreach($messages['payload']['headers'] as $header){ 
     // header will have those values: 
     /* 
     * [0] => Array 
      (
       [name] => From 
       [value] => [email protected] 
      ) 

      [1] => Array 
      (
       [name] => Date 
       [value] => Tue, 14 Mar 2017 15:55:30 +0700 
     ) 

      [0] => Array 
      (
       [name] => From 
       [value] => [email protected] 
     ) 
      [1] => Array 
      (
       [name] => Date 
       [value] => Tue, 14 Mar 2017 15:57:57 +0700 
     ) 
     */ 
    } 
} 
0

$maxHistoryId = 0; 
$headers = []; 
foreach($array['id'] as $v) 
{ 
    if($v['historyId'] >= $max) 
    { 
     $max = $v['historyId']; 
     $headers = $v['payload']['headers']; 
    }  
} 
$resultArray = array_values($headers); 
$resultArray = $resultArray[0]; 
+0

これは結果を表示せず、NULLに過ぎません。おそらく私は配列の行を残したので、私は質問を更新しました。あなたは[id] => 15acc7494d76f74eのhistoryIdを見るでしょう - これがあなたのコードがうまくいかない理由だと思います – user3312792

+0

も$ maxHistoryIdを$ maxに変更しました – user3312792

関連する問題