2017-10-04 19 views
1

私はクラス内に配列を持ち、 'Apple'のキー値( 'iPhone')を取得したいと考えています。 各ループを使用する必要があると仮定します。PHP多次元配列から値を取得する方法は?

どうすればいいですか?

更新:customerTypeとproductTypeのキー値も指定する必要があります。複数のデータがある場合は、foreachの使用できる

echo $productsArr[0]['productType']['phones']['Apple']."<br />"; 

foreach ($productsArr as $prod){ 
     echo $prod['productType']['phones']['Apple']."<br />"; 
    } 
+0

これは、メイン配列が何度も繰り返されるか、または1回だけですか? –

+0

foreachを使用しようとしましたが動作しませんでしたか? – AllisonC

+0

これは、メインアレイで複数回発生する可能性があります。 – ianhman

答えて

1

多かれ少なかれそれを与えることができる機能すべての製品とそれだけでクラスの呼び出し

$phone_products = new Products(); 



echo ($phone_products->get_value($phoneType, $productsArr)); 
//output: key ->Apple value ->iPhone 

NBなしから

$this->get_value($phoneType, $productsArr); 

を呼び出すクラス内でこれを使用するには、アレイ

<?php 

class Products 
{ 

    public function products_list() 
    { 

     $customerType = 'national'; 
     $productType = 'phones'; 
     $phoneType = 'Apple'; 
     $productsArr[] = array(
      'customerType' => 'national', 'productType' => array(
       'phones' => array(
        'Apple' => 'iPhone', 
        'Sony' => 'Xperia', 
        'Samsung' => 'Galaxy' 
       ), 
       'cases' => array(
        'leather' => 'black', 
        'plastic' => 'red', 
       ), 
      ), 
      'international' => array(
       'phones' => array(
        'BlackBerry' => 'One', 
        'Google' => 'Pixel', 
        'Samsung' => 'Note' 
       ), 
       'cases' => array(
        'leather' => 'blue', 
        'plastic' => 'green' 
       ), 
      ) 
     ); 

     echo $this->get_value($phoneType, $productsArr) .'<br>'; 
     echo $this->get_value($customerType, $productsArr) .'<br>'; 
     echo $this->get_value($productType, $productsArr) .'<br>'; 
    } 

    function get_value($product, array $products) 
    { 
     $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($products), RecursiveIteratorIterator::CHILD_FIRST); 

     foreach ($iterator as $key => $value) { 
      if (is_string($value) && ($key == $product)) { 
       return 'key ->' . $key .' value ->'.$value; 
      } 
     } 
     return ""; 
    } 
} 

$phone_products = new Products(); 


$phone_products->products_list(); 

からキーと値を返します:$ phoneType、$ productsArrは、他のメソッドで使用されているメソッド、または他のメソッドから渡されたメソッドを定義するか、クラス内のグローバル変数を定義します。

0

をちょうど私が作成した

foreach($productsArr[0]['productType']['phones'] as $phones){ 
    echo $phones[$phoneType]; } 
1

してみてくださいあなたは、単一のエントリをしたい場合は

class Products { 

    public function products_list() { 

     $customerType = 'national'; 
     $productType = 'phones'; 
     $phoneType = 'Apple'; 

     $productsArr = array(); 
     $productsArr[] = array(
      'customerType' => 'national', 
      'productType' => array(
       'phones' => array(
        'Apple' => 'iPhone', 
        'Sony' => 'Xperia', 
        'Samsung' => 'Galaxy' 
       ), 
       'cases' => array(
        'leather' => 'black', 
        'plastic' => 'red', 
       ), 
      ), 
      'international' => array(
       'phones' => array(
        'BlackBerry' => 'One', 
        'Google' => 'Pixel', 
        'Samsung' => 'Note' 
       ), 
       'cases' => array(
        'leather' => 'blue', 
        'plastic' => 'green' 
       ), 
      ) 
     ); 
    } 
} 
+0

これはクラスでどのように動作しますか?私はcustomerTypeとproductTypeのキー値を指定する必要があるので、BTWは私の質問を更新しました。 – ianhman

+0

@ianhman解決策を編集しました。顧客タイプを呼び出すには、 '$ phonetype'をcustomerTypeに置き換えます。それらはすべて同じ配列内にあるからです。例えば$ this-> get_value($ customerType、$ productsArr);または$ this-> get_value($ productType、$ productsArr); –

+0

私はクラスで動作するようにはできませんが、編集していただきありがとうございます。私は配列の$ productsArrを認識しないPHPStorm IDEを使用しています。public function get_value($ product、array $ productsArr) また、変数が定義されていないクラスの値をエコーし​​ている場所echo($ phone_products- > get_value($ phoneType、$ productsArr)); – ianhman

0
foreach($productsArr as $key1 => $data1){ 
    if(is_array($data1)) 
     foreach($data1 as $key2 => $data2){ 
      if(is_array($data2)) 
       foreach($data2 as $key3 => $data3){ 
        if(array_key_exists('Apple', $data3)) { 
         echo $data3['Apple'] ."\n"; 
        } 
       } 
     } 

} 
関連する問題