Меня попросили создать симуляцию array_keys
function
, но проверьте равенство "=="
возвращает ложь
Но с "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);
Я был бы рад узнать, потому что
Изменить: причина того, что два не работают в ЭТОТ Например, ваши функции не выдают одинаковых выходных данных: ваш производит:
array ( 0 => 'box', 1 => 'cube', 2 => 'ball', )
где функция php выдает:
array (
0 => 'box',
1 => 'cube',
2 => 'ball',
)
Если бы вы увидели это в веб-браузере, я думаю, что рендерер веб-браузера делает трюки с пробелами. Однако попробуйте положить эээ <pre>
теги вокруг него (или запустить в командной строке, чтобы проверить).
В принципе ==
делает больше, чем сравнивает эти два значения — документация предлагает «после жонглирования типа». Вы можете получить некоторые странные вещи, сравнивая строки, используя ==. Один хороший пример: '1e3' == '1000'
, Полезно использовать ==
время от времени, но, возможно, не в сочетании со строками.
Strcmp
Кроме того, хотя и не возвращает истинный / ложный ответ, но ответ -1, 0, 1 указывает, какая строка находится в алфавитном порядке перед другой.
Вы также должны посмотреть на ===
который также может быть полезен, но лично я бы придерживался strcmp со строками.
Привет никогда не использую ==
в PHP
, Это не будет делать то, что вы ожидаете. Даже если вы сравниваете строки со строками, PHP неявно преобразует их в числа с плавающей точкой и делает числовое сравнение, если они появляются числовыми.
попробуйте это, вы узнаете причину
$something = 0;
echo ('password' == $something) ? 'true' : 'false';// true
$something = 0;
echo ('password' === $something) ? 'true' : 'false'; // false
echo strcmp('password123',$something); // 1
Потому что они не массивы, а строки. Массивы не создаются таким образом. вы делаете это не правильно. Были ли они тогда массивами
if ($arrayOur == $arrayPhp)
оценил бы до истины. Но они просто струны и
"strcmp ($a, $b) == 0"
Не возвращает true, потому что в первой строке есть пробелы,
return 'array ( ' . implode(', ', $elements) . ', )';
Вы делаете это совершенно неправильно. Вы должны исправить свой подход.