我被要求创建模拟array_keys
function
,但检查等式"=="
会返回false。
但是"strcmp ($a, $b) == 0"
返回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);
我很高兴知道因为
答案 0 :(得分:4)
编辑:两个不在 THIS 实例中工作的原因是你的功能不会产生相同的输出:你的产生:
array ( 0 => 'box', 1 => 'cube', 2 => 'ball', )
php函数产生的地方:
array (
0 => 'box',
1 => 'cube',
2 => 'ball',
)
如果您在Web浏览器中查看,我认为Web浏览器渲染器会执行空白欺骗。但是,请尝试在其周围添加<pre>
标记(或在命令行中运行以进行检查)。
基本上==
做了更多,然后比较这两个值 - 文档建议&#34;在类型杂耍&#34;之后。通过使用==比较字符串,您可以获得一些奇怪的东西。一个很好的例子是:'1e3' == '1000'
。有时使用==
很有用,但可能不与字符串结合使用。
Strcmp
虽然没有返回真/假答案,但是-1,0,1答案表示哪个字符串按字母顺序排在另一个字母之前。
您还应该查看===
哪些内容也有用,但我个人会坚持使用字符串strcmp。
答案 1 :(得分:0)
您永远不会在==
中使用PHP
。它不会做你期望的。即使您将字符串与字符串进行比较,PHP也会隐式地将它们转换为浮点数,并在它们看起来是数字时进行数值比较。
尝试这些你会知道原因
$something = 0;
echo ('password' == $something) ? 'true' : 'false';// true
$something = 0;
echo ('password' === $something) ? 'true' : 'false'; // false
echo strcmp('password123',$something); // 1
答案 2 :(得分:0)
因为它们不是数组,而是字符串。数组不是这样创建的。你做错了。如果是阵列那么
if ($arrayOur == $arrayPhp)
会评估为true。但它们只是字符串而且
"strcmp ($a, $b) == 0"
不返回true,因为第一个字符串中有空格
return 'array ( ' . implode(', ', $elements) . ', )';
你这样做完全错了。你需要纠正你的方法。