PHP中的“==”和"strcmp"的区别
Difference between "==" and "strcmp" in PHP
我被要求创建模拟 array_keys
function
,但检查相等性 "=="
returns false。
但是 "strcmp ($a, $b) == 0"
return true
.
class Utility
{
public function convertArrayKeys(array $array)
{
$i = 0;
$elements = [];
foreach ($array as $element=>$value) {
$elements[] = ' ' . $i++ . " => '" . $element . "'";
}
return 'array ( ' . implode(', ', $elements) . ', )';
}
public function testStrings(array $array)
{
$arrayOur = $this->convertArrayKeys($array);
$arrayPhp = var_export(array_keys($array),true);
if ($arrayOur == $arrayPhp){
echo 'They are identical :)';
} else {
echo 'They are not identical :(';
echo '<br>';
print_r(str_split($arrayOur));
echo '<br>';
print_r(str_split($arrayPhp));
}
}
}
查看:
$repository = array('box'=>'blue', 'cube'=>'red', 'ball'=>'green');
$utility = new Utility();
echo "OUr array_keys: ";
echo $utility->convertArrayKeys($repository);
echo "<br />";
echo "PHP array_keys: ";
print_r (var_export(array_keys($repository)));
echo "<hr >";
echo "<br />";
echo $utility->testStrings($repository);
我很想知道,因为
您好,请不要在 PHP
中使用 ==
。它不会做你期望的。即使您将字符串与字符串进行比较,PHP 也会隐式地将它们转换为浮点数,并在它们出现数字时进行数字比较。
试试这些就知道原因了
$something = 0;
echo ('password' == $something) ? 'true' : 'false';// true
$something = 0;
echo ('password' === $something) ? 'true' : 'false'; // false
echo strcmp('password123',$something); // 1
编辑:两者在 THIS 实例中不起作用的原因是您的函数不产生相同的输出:您的函数产生:
array ( 0 => 'box', 1 => 'cube', 2 => 'ball', )
其中 php 函数产生:
array (
0 => 'box',
1 => 'cube',
2 => 'ball',
)
如果您要在 Web 浏览器中查看它,我认为 Web 浏览器渲染器会进行空格欺骗。但是尝试在它周围放置呃 <pre>
标签(或在命令行中 运行 进行检查)。
基本上 ==
做更多然后比较两个值 - 文档建议 "after type juggling"。你可以通过使用 == 比较字符串得到一些奇怪的东西。一个很好的例子是:'1e3' == '1000'
。有时使用 ==
很有用,但可能不与字符串一起使用。
Strcmp
也不是 return 一个 true/false 答案,而是一个 -1, 0, 1 答案,表明哪个字符串按字母顺序排在另一个前面。
您还应该看看 ===
,它也有有用的用途,但就我个人而言,我会坚持使用带有字符串的 strcmp。
因为它们不是数组,而是字符串。数组不是这样创建的。你这样做是不对的。那么它们是数组吗
if ($arrayOur == $arrayPhp)
会评估为真。但它们只是字符串和
"strcmp ($a, $b) == 0"
不是return,因为第一个字符串中有空格,
return 'array ( ' . implode(', ', $elements) . ', )';
你完全错了。你需要纠正你的做法。
我被要求创建模拟 array_keys
function
,但检查相等性 "=="
returns false。
但是 "strcmp ($a, $b) == 0"
return true
.
class Utility
{
public function convertArrayKeys(array $array)
{
$i = 0;
$elements = [];
foreach ($array as $element=>$value) {
$elements[] = ' ' . $i++ . " => '" . $element . "'";
}
return 'array ( ' . implode(', ', $elements) . ', )';
}
public function testStrings(array $array)
{
$arrayOur = $this->convertArrayKeys($array);
$arrayPhp = var_export(array_keys($array),true);
if ($arrayOur == $arrayPhp){
echo 'They are identical :)';
} else {
echo 'They are not identical :(';
echo '<br>';
print_r(str_split($arrayOur));
echo '<br>';
print_r(str_split($arrayPhp));
}
}
}
查看:
$repository = array('box'=>'blue', 'cube'=>'red', 'ball'=>'green');
$utility = new Utility();
echo "OUr array_keys: ";
echo $utility->convertArrayKeys($repository);
echo "<br />";
echo "PHP array_keys: ";
print_r (var_export(array_keys($repository)));
echo "<hr >";
echo "<br />";
echo $utility->testStrings($repository);
我很想知道,因为
您好,请不要在 PHP
中使用 ==
。它不会做你期望的。即使您将字符串与字符串进行比较,PHP 也会隐式地将它们转换为浮点数,并在它们出现数字时进行数字比较。
试试这些就知道原因了
$something = 0;
echo ('password' == $something) ? 'true' : 'false';// true
$something = 0;
echo ('password' === $something) ? 'true' : 'false'; // false
echo strcmp('password123',$something); // 1
编辑:两者在 THIS 实例中不起作用的原因是您的函数不产生相同的输出:您的函数产生:
array ( 0 => 'box', 1 => 'cube', 2 => 'ball', )
其中 php 函数产生:
array (
0 => 'box',
1 => 'cube',
2 => 'ball',
)
如果您要在 Web 浏览器中查看它,我认为 Web 浏览器渲染器会进行空格欺骗。但是尝试在它周围放置呃 <pre>
标签(或在命令行中 运行 进行检查)。
基本上 ==
做更多然后比较两个值 - 文档建议 "after type juggling"。你可以通过使用 == 比较字符串得到一些奇怪的东西。一个很好的例子是:'1e3' == '1000'
。有时使用 ==
很有用,但可能不与字符串一起使用。
Strcmp
也不是 return 一个 true/false 答案,而是一个 -1, 0, 1 答案,表明哪个字符串按字母顺序排在另一个前面。
您还应该看看 ===
,它也有有用的用途,但就我个人而言,我会坚持使用带有字符串的 strcmp。
因为它们不是数组,而是字符串。数组不是这样创建的。你这样做是不对的。那么它们是数组吗
if ($arrayOur == $arrayPhp)
会评估为真。但它们只是字符串和
"strcmp ($a, $b) == 0"
不是return,因为第一个字符串中有空格,
return 'array ( ' . implode(', ', $elements) . ', )';
你完全错了。你需要纠正你的做法。