2017-04-03 105 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; 
    } 
}); 

支付额外的照顾到&否则你的结果阵列将被视为回调内不变(即所有的变化丢弃)。