int转换为数组上的字符串-有关此上下文的建议

| 我有这些数组:$ _POST [\'atlOriginal \']和$ oldAtlPos。两者存储的值是这样的:
0   0
1   1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9
现在,如果我进行了比较(ѭ1),它将返回false,因为$ _POST [\'atlOriginal \']的值是Strings(从客户端通过GET / POST传递的值),而$ oldAtlPos的值是Integer。 我在这里可以做什么?最好的策略是什么?互相转换? 附言我需要评估值的顺序,所以ѭ2是必要的; 附言2的值都将作为Char(2)存储在数据库中; 编辑 因此:
for($i=0; $i<sizeof($oldAtlPos); $i++) echo $_POST[\'atlOriginal\'][$i].\"|\".gettype($_POST[\'atlOriginal\'][$i]).\" - \".$oldAtlPos[$i].\"|\".gettype((string)$oldAtlPos[$i]).\"<br/>\";
将返回 :
0|string - 0|string
1|string - 1|string
2|string - 2|string
3|string - 3|string
4|string - 4|string
5|string - 5|string
6|string - 6|string
7|string - 7|string
8|string - 8|string
9|string - 9|string
10|string - 10|string
11|string - 11|string
12|string - 12|string
13|string - 13|string
14|string - 14|string
15|string - 15|string
16|string - 16|string
17|string - 17|string
18|string - 18|string
但是似乎
if($_POST[\'atlOriginal\']===(string)$oldAtlPos)
仍然返回假...
已邀请:
如果要比较它们,可以: 使用
==
代替
===
(推荐)
==
表示“这些值是否匹配”
===
表示\'匹配这些值并且它们是相同类型\'
$foo[\'test\'] = Array(\"1\",\"2\",\"3\");
$bar = Array(1,2,3);
$baz = Array(3,2,1);

var_dump($foo[\'test\'] === $bar); // FALSE - does not work
var_dump($foo[\'test\'] === (string) $bar); // FALSE - does not work
var_dump($foo[\'test\'] == $bar); // TRUE - works!
var_dump($foo[\'test\'] == $baz); // FALSE - works because $baz is in a different order
==
不会检查键/值对的顺序,但是因为您仅使用值,所以键本质上是顺序并匹配(所以这就是您想要的) 根据上面的代码,这就是数组的实际外观
$foo[\'test\']
array(3) {
  [0]=>
  string(1) \"1\"
  [1]=>
  string(1) \"2\"
  [2]=>
  string(1) \"3\"
}
$bar
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}
==
检查以确保键(
[]
中的部分)和值(在本例中为
int()
)匹配,它不检查顺序-但这无关紧要,因为您仅使用值并且键是顺序。 如果您使用键/值对并且想要检查诸如以下的顺序,那么这只会对您造成影响:
// key/value pairs match but order does not
Array(\'1\' => \'B\', \'0\' => \'A\') === Array(\'0\' => \'A\', \'1\' = \'B\') // FALSE 
Array(\'1\' => \'B\', \'0\' => \'A\') == Array(\'0\' => \'A\', \'1\' = \'B\') // TRUE -- order is not checked
修复:如果您使用的是Key => Value对,那么这将达到目的:
// Function to fix data
function array_fix(&$item, $key)
{
    $item = intval($item);
}

$foo[\'test\'] = Array(1=>\"1\",2=>\"2\",3=>\"3\");
$bar = Array(1=>1,2=>2,3=>3);
$baz = Array(2=>2,1=>1,3=>3);

// str !== int
var_dump($foo[\'test\'] === $bar); // FALSE

// Apply fix to all data in array
array_walk($foo[\'test\'],\'array_fix\');

// int === int -- yay :-D
var_dump($foo[\'test\'] === $bar); // TRUE
var_dump($foo[\'test\'] === $baz); // FALSE - correct: out of order
请勿使用ѭ2compare将值与其类型进行比较。 仅使用using6ѭ比较值。 编辑: 例如,有:
$a = array(1, 2, 3);
$b = array(\'1\', \'2\', \'3\');
然后以两种方式(
==
===
)比较这些数组时,将得到以下结果:
$a == $b; // TRUE

$a === $b; // FALSE
如您所见,您需要使用
==
比较方法。 编辑2: 在
P.S.
中,您说您也需要比较数组顺序。 它已经做到了。如果比较这样的数组,您将得到
false
$a = array(3, 2, 1);
$b = array(\'1\', \'2\', \'3\');

$a == $b; // FALSE
您必须遍历每个元素并分别进行比较

要回复问题请先登录注册