PHP 关联数组

发布于 2024-11-08 23:34:25 字数 258 浏览 0 评论 0 原文

我有一个数组,

$arrTest = array('val1','val2','val3','val4');
$arrTest['lastKey'] = 'Last Key';
foreach($arrTest as $key => $val) {
  if($key == 'lastKey') {
     echo "last found";
  }
}

上面的代码不起作用。我在数组中添加了关联元素。会不会是这个原因呢?

I have an array as

$arrTest = array('val1','val2','val3','val4');
$arrTest['lastKey'] = 'Last Key';
foreach($arrTest as $key => $val) {
  if($key == 'lastKey') {
     echo "last found";
  }
}

The above code is not working. I have added associative element in the array. Could it be the reason?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

把梦留给海 2024-11-15 23:34:25

== 更改为 ===

if($key == 'lastKey')

您现有的代码回显 lastfound 两次,一次用于键 0 和一次用于键 lastKey

使用 == 比较整数 0 和字符串 'lastKey' 返回 true!

来自 PHP 手册

字符串转换为数字

当在 a 中计算字符串时
数字上下文,结果值
和类型确定如下。

该字符串将被评估为
如果它包含任何以下内容,则为浮点数
字符“.”、“e”或“E”。
否则将被评价为
整数。

该值由初始值给出
字符串的一部分。 如果字符串
从有效的数字数据开始,这
将是使用的值。否则,
值将为 0(零)
。有效数字
data 是可选符号,后面是
一位或多位数字(可选
包含小数点),后面跟着
通过一个可选的指数。指数
是“e”或“E”后跟一个或
更多数字。

Change == to === in:

if($key == 'lastKey')

Your existing code echos last found twice, once for key 0 and once for key lastKey.

Comparing integer 0 and string 'lastKey' using == returns true !!

From the PHP manual:

String conversion to numbers

When a string is evaluated in a
numeric context, the resulting value
and type are determined as follows.

The string will be evaluated as a
float if it contains any of the
characters '.', 'e', or 'E'.
Otherwise, it will be evaluated as an
integer.

The value is given by the initial
portion of the string. If the string
starts with valid numeric data, this
will be the value used. Otherwise, the
value will be 0 (zero)
. Valid numeric
data is an optional sign, followed by
one or more digits (optionally
containing a decimal point), followed
by an optional exponent. The exponent
is an 'e' or 'E' followed by one or
more digits.

孤檠 2024-11-15 23:34:25

使用===进行比较。因为当键 0 与字符串 lastKey 进行比较时,字符串会被转换为整数,并返回 false 结果。
http://codepad.org/5QYIeL4f

$arrTest = array('val1','val2','val3','val4');
$arrTest['lastKey'] = 'Last Key';
foreach($arrTest as $key => $val) {
  if($key === 'lastKey') {
     echo "last found";
  }
}

了解有关差异的更多信息:http://php.net/manual/en/language.operators.comparison.php

Use === to compare. Because when key 0 will be compared with string lastKey, string will be converted to integer and false result will be returned.
http://codepad.org/5QYIeL4f

$arrTest = array('val1','val2','val3','val4');
$arrTest['lastKey'] = 'Last Key';
foreach($arrTest as $key => $val) {
  if($key === 'lastKey') {
     echo "last found";
  }
}

Read more about differences: http://php.net/manual/en/language.operators.comparison.php

世态炎凉 2024-11-15 23:34:25

您还需要更改相等条件来检查类型。

if($key === 'lastKey')

这是因为 PHP 将 ' ' == 0 计算为 true。

You need to change your equality condition to check the type as well.

if($key === 'lastKey')

This is because PHP evaluates ' ' == 0 as true.

夜空下最亮的亮点 2024-11-15 23:34:25

当我运行你的代码时,“最后找到”被输出两次。在 PHP 中,'lastKey' 的计算结果为 0,因此 if($key == 'lastKey') 实际上匹配两次:一次匹配 0,一次匹配特殊元素。

When I ran your code, 'last found' was outputted twice. 'lastKey' is evaluated to 0 in PHP, so if($key == 'lastKey') actually matches twices: once for 0 and once for your special element.

乖乖公主 2024-11-15 23:34:25

使用 end() 函数获取数组的最后一个键并在 if 语句中进行比较。

$arrTest = array('val1','val2','val3','val4');
$lastKey = end($arrTest);
foreach($arrTest as $key => $val) {
  if($val == $lastKey) {
     echo "last found";
  }
}

use the end() function to get the last key of an array and compare it in your if statement.

$arrTest = array('val1','val2','val3','val4');
$lastKey = end($arrTest);
foreach($arrTest as $key => $val) {
  if($val == $lastKey) {
     echo "last found";
  }
}
许仙没带伞 2024-11-15 23:34:25

您的代码工作正常:
在这里查看:http://codepad.org/hfOFHMnc

但是使用“===”而不是“==” “因为您可能会遇到错误
将字符串与 0 进行比较,它会回显两次。

<?php

$arrTest = array('val1','val2','val3','val4');
$arrTest['lastKey'] = 'Last Key';
print_r($arrTest);

foreach($arrTest as $key => $val) {
  if($key == 'lastKey') {       // use === here
     echo "key = $key   :: last found \n";
  }
}

Your code is working fine :
see it here : http://codepad.org/hfOFHMnc

However use "===" instead of "==" as you might encounter a bug when
comparing the string with 0 , and it will echo twice.

<?php

$arrTest = array('val1','val2','val3','val4');
$arrTest['lastKey'] = 'Last Key';
print_r($arrTest);

foreach($arrTest as $key => $val) {
  if($key == 'lastKey') {       // use === here
     echo "key = $key   :: last found \n";
  }
}
南巷近海 2024-11-15 23:34:25

如果你想测试数组键是否存在,只需使用 array_key_exists

array_key_exists('lastKey', $arrTest)

你也可以使用 isset 但请注意,如果值与该键相关联的是null

If you want to test if an array key exists, simply use array_key_exists:

array_key_exists('lastKey', $arrTest)

You could also use isset but note that it returns false if the value associated to the key is null.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文