我有一个看起来像这样的数组:
Array
(
[2019] => Array
(
[2019] => Array
(
[year] => 2019
[amount] => 3269.93
[type] => charge
)
)
[2018] => Array
(
[2018] => Array
(
[year] => 2018
[amount] => 219.25
[type] => payout
)
)
[2017] => Array
(
[2017] => Array
(
[year] => 2017
[amount] => 214.06
[type] => charge
)
)
)
我尝试过array_search(),但我认为它无法实现我想要的功能。
根据手册,array_search()用于在数组中搜索特定值,如果找到该值,则它将返回其对应的键。这考虑到我们知道我们要寻找的值是什么,并且我们想返回密钥。我想反过来做。我知道键,但是我不知道值,我想返回值而不是键。
我正在尝试执行类似于MYSQL "select amount where year='2017'"
的操作,但是要使用数组。
我该如何完成?有想法吗?
答案 0 :(得分:0)
您可以使用array_filter
array_filter($array,function ($v){
return current($v)["amount"] == 3269.93;
});
答案 1 :(得分:0)
我使用嵌套的foreach解决了我的问题。我敢肯定有更聪明的方法可以达到最终结果,但对我有用。
数组
function lonlat2xy(lonUsrD, latUsrD) { //user input position in lon a lat in degrees
var oneRadOfDegree = 57.29577951308232; // for conversion of degrees to rads
var latPragR = 50.008 / oneRadOfDegree; //lat. of base station, default position in rads
var lonPragR = 14.447 / oneRadOfDegree; //lon. of base station, default position in rads
var leftPragPx = 301.5; // length from left side of image to base station in px
var topPragPx = 217.5; // length from top side of image to base station in px
var ratioMap = 1.0; //ratio of the map (always 1 for thos example)
var radiusEarth = 6378.144; //radius of Earth
var pi1 = 3.141592653589793; //pi
var pi2 = 6.283185307179586; //2pi
var pi05 = 1.570796326794897; //0.5pi
var lonUsrRNeg = -1 * (lonUsrD / oneRadOfDegree); //inversed user lon. position in rads
var latUsrR = latUsrD / oneRadOfDegree; //user lat. position in rads
var lonPragRNeg = -1 * lonPragR; //inversed base station lon. position in rads
var latPragR1 = latPragR; //base station lat. position in rads
//?????? No idea what this formula does
var un25 = (Math[sin](latUsrR) * Math[sin](latPragR1)) + (Math[cos](latUsrR) * Math[cos](latPragR1) * Math[cos](lonUsrRNeg - lonPragRNeg));
sin()
//??????
var un26 = Math[acos](un25);
un25 = Math[sin](latUsrR) - (Math[sin](latPragR1) * un25);
var un27 = (Math[cos](latPragR1) * Math[sin](un26));
if (un27 != 0) {
un25 = un25 / un27;
} else {
un25 = 0;
}
var un28 = Math[acos](un25);
var lonDiffPragUsr = lonUsrRNeg - lonPragRNeg;
if ((lonUsrRNeg > lonPragRNeg) && (lonDiffPragUsr < pi1)) {
un28 = pi2 - un28;
}
var un2a = un26;
var un2b = un28;
var xPxImg, yPxImg, un2e;
if (un2a < pi05) {
un2e = Math[tan](un2a);
xPxImg = un2e * Math[sin](un2b);
yPxImg = un2e * Math[cos](un2b);
} else {
xPxImg = 0;
yPxImg = 0;
}
//[xy]PxImg - wrong name - I dont know what exactly this var represent
xPxImg = leftPragPx + (xPxImg * radiusEarth) / ratioMap; //IMG-x = (IMGx prazske stanice) + ((2PI*(pixN/pix360)) * polomer zeme)/ 1 ... ratio
yPxImg = topPragPx - ((yPxImg * radiusEarth) / ratioMap);
//Clear part from here
var xPxImgRo = Math[round](xPxImg); //Round IMG-x
var yPxImgRo = Math[round](yPxImg); //Round IMG-y
out_xy = new Array(2); //create array for rturn
out_xy[0] = xPxImgRo;
out_xy[1] = yPxImgRo;
return out_xy;
}
每个的最终结果
$data_array='Array
(
[2019] => Array
(
[2019] => Array
(
[year] => 2019
[amount] => 3269.93
[type] => charge
)
)
[2018] => Array
(
[2018] => Array
(
[year] => 2018
[amount] => 219.25
[type] => payout
)
)
[2017] => Array
(
[2017] => Array
(
[year] => 2017
[amount] => 214.06
[type] => charge
)
)
)';