最近,在帮
其它部门做一个API的比对。之前用的是
SQL,现在想迁移到Mysql。但需要
测试两边的返回值是否一致。
开发提供的
web展现格式是php数组。刚开始想到的是直接遍历。后来发现file_get_contents后的类型为string.还需要转换为php array.
思路:
1. 将 url放入文件url中。 但不包含域名,因为域名需要作为参数。
2. 然后逐行读取并用file_get_contents获取每行的string.
3. 获取后将之转化为php array。
4. 将主键按id进行重组。
5. 然后将sql和Mysql的都转化成php array.
$file_handle = file("url"); ## 将 url放入文件url中
foreach($file_handle as &$li) { #遍历url里边的每行
$line = "http://config.dangdang.com/$li"; #拼接
$sql= "http://config.dangdang.sqlserver/$li"; #拼接
$a=file_get_contents($line); #获取string
$A=file_get_contents($sql);
# echo $line;
# echo $sql;
eval('$b='.$a.';'); #转化为php array。
foreach($b['c2c_shop_policy'] as $r){ #找到主键为c2c_shop_policy
$c[$r['id']]=$r; #将主键按id进行重组
}
#################################sqlserver###############
eval('$B='.$A.';');
foreach($B['c2c_shop_policy'] as $R){
$C[$R['id']]=$R;
}
echo "The $q url is $line \n";
$q=$q+1;
compare($c,$C);
$c=array("");
$C=array("");
################
6. compare进行递归比较验证。
compare函数 #对php 数组进行递归比较。
#!/usr/local/php/bin/php
<?php
$a = array( 123 => array ( "name" => "zhang",
"age" => 30,
"text" => "hello"
),
456 => array ( "name" => "zhang",
"age" => 30,
"text" => "hello"
),
);
$b = array( 123 => array ( "name" => "zhang",
"age" => 30,
"text" => "mhello"
),
456 => array ( "name" => "zhang",
"age" => 30,
"text" => "hello"
)
);
compare($a,$b); #验证$a的键是否存在于$b.
compare($b,$a); #验证$b的键是否存在于$a.
function compare($aa,$bb) {
foreach ($aa as $k => $v) {
if (isset($bb[$k])) {
if ( is_array($v) ) {
compare($v,$bb[$k]);
}
else {
### 简单值比较
if ($bb[$k] == $v ) {
echo "ok.. $k\n";
}
else {
echo "diff value in site (key:$k, value:$v)\n";
}
}
}
else {
echo "Doesn't exist in site B (id:$k)\n";
}
}
}