2017-04-03 142 views
0

我以數組的形式獲取輸出。如何在PHP中調用數組的特定數組值?

$array = 
     Array 
    (
     [12] => Array 
      (
       [1] => Array 
        (
         [14] => Array 
          (
           [0] => Array 
            (
             [name] => Avaya Implementation Services 
             [service_id] => 14 
             [ser_type_id] => 1 
             [service_desc] =>Avaya Implementation Servic 
            ) 

          ) 

        ) 

      ) 

    ); 

我只想打印service_desc數組值。我不想像$ array [12] [1] [14] [0] ['service_desc'];

我該怎麼稱呼service_desc數組的數組值?

+1

你將不得不將它稱爲'$ array [12] [1] [14] [0] ['service_desc'];否則你將需要重新分解你的數組,或者重新考慮你生成數組的方式; – hassan

+3

我會仔細看看任何代碼首先產生這樣一個奇數組 – RiggsFolly

+0

我認爲有任何預定義的函數來捕捉特定的數組值。 @hassan – Siddhu

回答

1

至於你提到你不想稱其爲$array[12][1][14][0]['service_desc']您可以使用extract功能,將從您的陣列創建變量,

extract($array[12][1][14][0]); 
echo $service_desc; 

然後你就可以用你的特定鍵,如service_desc如變量。

1

你可以試試這個功能:(請優化按您的要求)

$arr ="<YOUR ARRAY>"; 
$val = "service_desc"; 
echo removekey($arr, $val); 

function removekey($arr, $val) { 
    $return = array(); 
    foreach ($arr as $k => $v) { 

     if (is_array($v) && $k !== $val) { 

      removekey($v, $val); 
      continue; 
     } 
     if ($k == $val) { 

      echo ($arr[$k]);    
      die; 
     } 
     $return[$k] = $v; 
    } 
    return $return; 
} 
1

使用轉換多維數組到單個陣列iterator_to_array

REF:http://php.net/manual/en/function.iterator-to-array.php

$service_desc= iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator($your_array)), 0); 
print_r($service_desc); 

結果:

Array 
(
    [name] => Avaya Implementation Services 
    [service_id] => 14 
    [ser_type_id] => 1 
    [service_desc] =>Avaya Implementation Servic 
) 
1

您可以使用array_walk_rescursive幀匹配關鍵字的一維數組:

DEMO

<?php 
$array[12][1][14][0]['service_desc'] = 'Avaya Implementation Servic'; 
$array[12][1][14][0]['service']  = 'dsfasf'; 
$array[12][1][114][0]['service_desc'] = 'Avaya Implementation Servicasdfdsf'; 

$searchKey = 'service_desc'; 

$desiredValues = []; 
array_walk_recursive($array, function ($v, $k) use ($searchKey, &$desiredValues) { 
    if ($k === $searchKey) { 
     $desiredValues[] = $v; 
    } 
}); 

print_r($desiredValues); 

因此,這將產生:

Array 
(
    [0] => Avaya Implementation Servic 
    [1] => Avaya Implementation Servicasdfdsf 
) 
1

您可以使用array_walk_recursive功能。

array_walk_recursive($array, function ($val, $key) { 
    if ($key == 'service_desc') print_r($val); 
}); 

取而代之的是print_r語句,你可以收集你的數據轉化爲另一種結構,它傳達你使用use聲明,或與$userdata附加參數(見http://www.php.net/manual/en/function.array-walk-recursive.php)。在use (&$results)

$results = array(); 
array_walk_recursive($array, function ($val, $key) use (&$results) { 
    if ($key == 'service_desc') { 
     $results []= $val; 
    } 
}); 

支付額外的照顧到&否則你的結果陣列將被視爲回調內不變(即所有的變化丟棄)。