Разница между & quot; == & quot; и & quot; strcmp & quot; в переполнении стека

Меня попросили создать симуляцию 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);

Я был бы рад узнать, потому что

-4

Решение

Изменить: причина того, что два не работают в ЭТОТ Например, ваши функции не выдают одинаковых выходных данных: ваш производит:

array ( 0 => 'box', 1 => 'cube', 2 => 'ball', )

где функция php выдает:

array (
0 => 'box',
1 => 'cube',
2 => 'ball',
)

Если бы вы увидели это в веб-браузере, я думаю, что рендерер веб-браузера делает трюки с пробелами. Однако попробуйте положить эээ <pre> теги вокруг него (или запустить в командной строке, чтобы проверить).


В принципе == делает больше, чем сравнивает эти два значения — документация предлагает «после жонглирования типа». Вы можете получить некоторые странные вещи, сравнивая строки, используя ==. Один хороший пример: '1e3' == '1000', Полезно использовать ==время от времени, но, возможно, не в сочетании со строками.

Strcmp Кроме того, хотя и не возвращает истинный / ложный ответ, но ответ -1, 0, 1 указывает, какая строка находится в алфавитном порядке перед другой.

Вы также должны посмотреть на === который также может быть полезен, но лично я бы придерживался strcmp со строками.

4

Другие решения

Привет никогда не использую == в PHP, Это не будет делать то, что вы ожидаете. Даже если вы сравниваете строки со строками, PHP неявно преобразует их в числа с плавающей точкой и делает числовое сравнение, если они появляются числовыми.

попробуйте это, вы узнаете причину

$something = 0;
echo ('password' == $something) ? 'true' : 'false';// true

$something = 0;
echo ('password' === $something) ? 'true' : 'false'; // false

echo strcmp('password123',$something); // 1
0

Потому что они не массивы, а строки. Массивы не создаются таким образом. вы делаете это не правильно. Были ли они тогда массивами

if ($arrayOur == $arrayPhp)

оценил бы до истины. Но они просто струны и

"strcmp ($a, $b) == 0"

Не возвращает true, потому что в первой строке есть пробелы,

 return 'array ( ' . implode(', ', $elements) . ', )';

Вы делаете это совершенно неправильно. Вы должны исправить свой подход.

0
По вопросам рекламы [email protected]