2016-05-26 9 views
0

多次元配列をソートする際に、毎回異なるXMLフィードから取得することに問題があります。私は何かを見つけてその結果を変数に入れる必要があります。私はまだPHPを学んでいますが、残念ながらこれは私の頭の中に少しあります。多次元配列で結果を検索して変数に追加する

私は自分が持っているものを分解します。 $valsarrayに含まれている私の配列の例:今、私は私が使用して結果を得ることができることを理解

Array 
([0] => Array 
     (
      [tag] => GIVENNAME 
      [type] => complete 
      [level] => 8 
      [value] => peter 
     ) 
    [1] => Array 
     (
      [tag] => FAMILYNAME 
      [type] => complete 
      [level] => 8 
      [value] => rabbit 
     ) 
[2] => Array 
     (
      [tag] => COMPLETENUMBER 
      [type] => complete 
      [level] => 9 
      [value] => 123-345-4567 
     ) 
[3] => Array 
     (
      [tag] => URIID 
      [type] => complete 
      [level] => 9 
      [value] => [email protected] 
     ) 
) 

$phone = $valsarray[2][value];

しかし、私の問題は、何の電話番号が与えられなかった場合は、XMLフィードをすることアレイ3は、アレイ2

なるので、電話番号配列を含んでいないので、私の質問は、私はCOMPLETENUMBERが存在するかどうかを見つけるために配列をループして、$phone変数にvalueに含まれている電話番号を割り当てることについては行くだろうかありますか?

+0

があることができますこれは、あなたが興味を持っているタグのいずれかの値の配列を取得するためにAbraCadaverの答えで提案array_columnに包まれた可能1つ以上の完全な番号のエントリ(有効な電話番号を持つ)? –

+0

ただ1つのエントリーはありませんが、私の問題は、電話番号が必要でないため、配列が変更されるということでした。 –

答えて

1

このループはそれを行うだろう:

foreach($valsarray as $fieldArray) 
{ 
    if ($fieldArray['tag'] === 'COMPLETENUMBER') 
    { 
     $phone = $fieldArray['value']; 
     break; 
    } 
} 

あなたが同じアレイ上の繰り返しの事のこのタイプを実行する必要がある場合は、その都度検索よりも、それを再インデックスしたほうが良いと思います。あなたはこのようにインデックスを再作成できます。それを再インデックスした後

foreach($valsarray as $key => $fieldArray) 
{ 
    $valsarray[$fieldArray['tag']] = $fieldArray; 
    unset($valsarray[$key]); 
} 

、あなたが望む任意のフィールドのためにこれを行うことができます。

$phone = $valsarray['COMPLETENUMBER']['value']; 
+0

美しいmk !!!それは魅力のように働いた!私は非常に感謝し、それが私を許可するとすぐに受け入れる:) –

+0

はそれを得ました!私は電子メールと電話をつかむために私はこれをやるだろうか? $ phone = $ valsarray ['COMPLETENUMBER'] ['value']; $ email = $ valsarray ['URIID'] ['value']; –

+0

電話はあなたが興味を持っているわけではないので、このループ方法は最良の方法ではありません。 – AbraCadaver

2

ここに1つの方法です:

$tags = array_column($valsarray, null, 'tag'); 

if(isset($tags['COMPLETENUMBER'])) { 
    $phone = $tags['COMPLETENUMBER']['value']; 
} 

それともだけのケア場合約value

$tags = array_column($valsarray, 'value', 'tag'); 

if(isset($tags['COMPLETENUMBER'])) { 
    $phone = $tags['COMPLETENUMBER']; 
} 

だから、要するに:COMPLETENUMBERインデックスはあなたがどんなvalue得ることができますarray_column()value

から値を取得し、その後に設定されている場合は

  • tag
  • によってインデックスさvalue値の配列を取得します。あなたは欲しい:

    $email = $tags['URIID']; 
    
+0

ありがとう:) –

1

n array_filterを入力してCOMPLETENUMBERエントリのみを取得し、見つかった場合は$phoneと設定します。あなたの他のコメントに基づいて

$items = array_filter($valsarray, function($x) { return $x['tag'] == 'COMPLETENUMBER'; }); 
$phone = $items ? reset($items)['value'] : null; 

あなたは、アレイからのタグのサブセットの値を取得したい場合、あなたはarray_filterコールバックでin_arrayを使用することができます。

$tags = ['COMPLETENUMBER', 'URIID']; 
$data = array_column(array_filter($valsarray, function($x) use ($tags) { 
    return in_array($x['tag'], $tags); 
}), 'value', 'tag'); 

結果は次のように次のようになります:

array (size=2) 
    'COMPLETENUMBER' => string '123-345-4567' (length=12) 
    'URIID' => string '[email protected]' (length=23) 
関連する問題