найти первый элемент, который необходим - PullRequest
0 голосов
/ 17 июня 2011

У меня есть этот массив

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 ]

2 голосов
/ 17 июня 2011

Это должно сделать это:

$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 голос
/ 17 июня 2011

Я бы сделал это:

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 голос
/ 17 июня 2011

Если я правильно понимаю, что вы хотите сделать, и если порядок клавиш не гарантируется точно таким же, как в примере, вы можете сделать что-то вроде:

// 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 голос
/ 17 июня 2011

попробуй с 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;
} 

}

или вы можете пройти через ключ массива-пересечения

1 голос
/ 17 июня 2011

Да, вы можете сделать это так, как вы указали в своем коде.Однако ваша логика оператора 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'];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...