2011-06-17 58 views
0

的第一個元素我有這樣的陣列發現需要

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']} 
} 

我有上面的代碼,我認爲可以工作,但有沒有更好的辦法

+2

我不明白是什麼,可能應該做的。你使用的值是否爲*未設置? – rid

+0

基本上我想要一個更好的方式來找到正確的順序使用哪一個。 SOme可能設置,有些可能不會 – Trace

+0

價值應該是專業 – Trace

回答

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); 
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']; 
} 
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變量設置爲第一個找到的值。如果未找到任何值,則將其設置爲默認值。

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; 
} 

}

或U可以經過array-intersect-key

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. 使用該密鑰並將其存儲在$use_me中。
+0

究竟做什麼 – Trace

+0

@Tamer:查看更新的答案。此外,更新的代碼使其更短。 – netcoder