У меня есть массив.
$ 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.
Каждый элемент массива имеет ключ. Если вы просматриваете текущий массив и выводите каждый ключ, вы получаете следующее:
$arrayVar = array(8, 10, 'u'=>24, 'm'=>45, 54, 45);
foreach($arrayVar as $curK=>$curV)
{
echo $curK, ' ';
}
//outputs: 0 1 u m 2 3
Как видите, элементам массива, у которых нет указанного ключа, дается следующее доступное числовое значение индекса (которое начинается с нуля для первого).
Ваш второй пример не сработает, потому что:
Вы проверяете значение переменной, которая еще не существует (и PHP сообщит вам об этом), и в результате вы никогда не введете этот код.
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
}
}
}
Каждый элемент массива имеет ключ, даже если вы не объявили его явно. Чтобы увидеть их, используйте 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. пожалуйста прочитайте инструкцию.