找到所需的第一个元素

时间:2011-06-17 18:50:16

标签: php if-statement

我有这个数组

Array
(
    [name] => Step1 is here
    [standard] => Array
        (
            [product_id] => 85,99
            [product_name] => Step1 is here
            [product_price] => 976.0000
            [product_description] => :something 
            [product_image] => http://someurl.com/shop_pos/image/data/13D.png
        )

    [professional] => Array
        (
            [product_id] => 61
            [product_name] => Step1 is here
            [product_price] => 289.0000
            [product_description] => somethingothere 
            [product_image] => http://someurl.com/shop_pos/image/data/13B.png
        )
    [premium] => Array
        (
            [product_id] => 677
            [product_name] => Step1 is here
            [product_price] => 289.0000
            [product_description] => somethingothere 
            [product_image] => http://someurl.com/shop_pos/image/data/13A.png
        )

)

是否可以按照我需要的正确顺序轻松引用。所以我需要的订单是标准的,专业的,高级的......所以,如果一个人不在场,我可以这样做吗

 if (!isset($my_array['standard'])) {
 $use_me = $my_array['standard']
}elseif(!isset($my_array['professional'])) {
 $use_me = $my_array['professional']
}elseif(!isset($my_array['professional'])) {
    $use_me = $my_array['premium']}
}

我有上面的代码,我认为可能有用,但有更好的方法

5 个答案:

答案 0 :(得分:2)

应该这样做:

$keys = array_slice(array_keys($my_array), 1, 1);
$use_me = $my_array[$keys[0]];

简而言之:

  1. 获取数组键(名称,标准,专业,高级)。 (array_keys
  2. 获取第二个密钥(绕过name,因此返回standard或第二个密钥是什么)。 (array_slice
  3. 使用该密钥引用$my_array并将其存储在$use_me

答案 1 :(得分:1)

是的,您可以按照代码中的方式进行操作。但是,if语句逻辑不正确。你的代码应该是这样的:

if (isset($my_array['standard'])) {
    $use_me = $my_array['standard'];
} elseif(isset($my_array['professional'])) {
    $use_me = $my_array['professional'];
} elseif(isset($my_array['premium'])) {
    $use_me = $my_array['premium'];
}

答案 2 :(得分:1)

如果我理解你想要做什么,并且如果不保证键的顺序与示例中的顺序完全相同,那么你可以这样做:

// initialization
$use_me = 'default value';

// go through each package
foreach (array('standard', 'professional', 'premium') as $package) {
    // when we find a package that does exist
    if (isset($my_array[$package])) {
        // mark it as found and exit the loop
        $use_me = $package;
        break;
    }
}

这将遍历所有包并将$use_me变量设置为第一个找到的值。如果未找到任何值,则将其设置为默认值。

答案 3 :(得分:1)

尝试 array_key_exists

foreach($input as $k=>$v) {

if (array_key_exists('standard', $k)) {
$output [$k] = $k;
}
if (array_key_exists('professional', $k)) {
$output [$k] = $k;
}
if (array_key_exists('premium', $k)) {
$output [$k] = $k;
} 

}

或者你可以通过 array-intersect-key

答案 4 :(得分:1)

我会这样做:

foreach (array('standard', 'professional', 'premium') as $name) {
    if (isset($my_array[$name])) {
        $use_me = $my_array[$name];
        break;
    }
}

或更结构化:

function selectPlan($array) {
    foreach (array('standard', 'professional', 'premium') as $name) {
        if (isset($array[$name])) return $array[$name];
    }
}

$use_me = selectPlan($my_array);