переключатель php ($ array_key), когда нет ключа для некоторых элементов массива

У меня есть массив.

$ arrayVar = array (8, 10, ‘u’ => 24, ‘m’ => 45, 54, 45);

foreach($arrayVar as $curK=>$curV)

switch($curK)
{
case 'u':

echo $curK;  //statement

break;

default:

//statements
}

Почему операторы в первом случае выполняются для всех $ curK, где ключ массива не указан, кроме случаев, когда метка соответствует значению $ curK?

Я попытался преодолеть проблему, проверив $ curK на пустые значения

if(!empty($curK)) {

foreach($arrayVar as $curK=>$curV)

switch($curK)
{
case 'u':

echo $curK;  //statement

break;
}
}

   $arrayVar = array('a'=>8400,'u'=>1100,1300,1400,true);

echo '<pre>'; print_r($arrayVar);

foreach($arrayVar as $curK=>$curDU)
{
echo "\n" . $curK . "\t";

switch($curK)
{
case 'a':

echo 'When a : ' . $curK . "\n";

break;

case 'u':

echo 'When u : ' . $curK . "\n";

break;

default:
}
}

Это результат, который я получил

массив
(
[a] => 8400
[u] => 1100
[0] => 1300
[1] => 1400
[2] => 1
)

Когда:

и когда ты: ты

0 Когда: 0

1
2

Проблема возникла с назначенным php ключом 0.

-1

Решение

Каждый элемент массива имеет ключ. Если вы просматриваете текущий массив и выводите каждый ключ, вы получаете следующее:

$arrayVar = array(8, 10, 'u'=>24, 'm'=>45, 54, 45);

foreach($arrayVar as $curK=>$curV)
{
echo $curK, ' ';
}

//outputs: 0 1 u m 2 3

демонстрация

Как видите, элементам массива, у которых нет указанного ключа, дается следующее доступное числовое значение индекса (которое начинается с нуля для первого).

Ваш второй пример не сработает, потому что:

  1. Вы проверяете значение переменной, которая еще не существует (и PHP сообщит вам об этом), и в результате вы никогда не введете этот код.

  2. 0 будет оценивать true когда перешел к empty() который, поскольку, как я объяснил выше, значения массива, не имеющие ключа, получат числовой ключ, первое значение будет иметь нулевой ключ, который станет false в вашем заявлении, которое, вероятно, не то, что вы хотите.

То, что вы, вероятно, ищете, чтобы убедиться, что элемент массива имеет нечисловой ключ, прежде чем действовать на него:

foreach($arrayVar as $curK=>$curV) {
if(!is_int($curK)) {
switch($curK)
{
case 'u':
case 'm':
echo $curK;  //statement
break;
default:
// do somethng
}
}
}

демонстрация

2

Другие решения

Каждый элемент массива имеет ключ, даже если вы не объявили его явно. Чтобы увидеть их, используйте array_keys функция. Рассмотрим этот массив:

$arr = ['apple','banana', 'favorite' => 'plum'];

Это может выглядеть как favorite это единственный ключ, но это не так:

$keys = array_keys($arr);
print_r($keys);

Результат:

[
0 => 0,
1 => 1,
2 => 'favorite',
]

Как видите, ключи 0, 1, а также favorite, Когда ключ не указан, PHP создает единицу и продолжает увеличиваться, начиная с наибольшего текущего целочисленного ключа. Если нет целочисленного ключа, он начинается с 0,

Понимание массивов фундаментальный в PHP. пожалуйста прочитайте инструкцию.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector