我目前有var:$_REQUEST['fb_friend_uid']
,它给出了以下输出:
Array{"returned_val":["47483647","47483647","47483647","665414807","263901486","665414807","665414807","665414807"]}
我希望将数据保存到一个新数组中,只包含格式为的数字; 47483647, 47483647, etc
目标是在sql查询中使用它,如下所示:
SELECT * FROM vote WHERE
vote_fb_uid IN ($myNumbers)
将它保存到一个新数组中,我认为可以这样做:
foreach ($_REQUEST['fb_friend_uid'] as $uid) {
$uids[] = $uid['id'];
}
$ids = join(',', $uids);
但是我的问题仍然存在,如何“清理”第一个var只包含数字。 建议?
答案 0 :(得分:1)
我无法为您提供完全解决方案,因为我不确定$_REQUEST['fb_friend_uid']
返回的值是否是使用json_encode()
打印的PHP数组,或者value实际上是一个json字符串。
在任何一种情况下,哪里有一个利用这两种情况的例子,所以在你的场景中使用哪一个有意义:
如果是PHP数组:
假设PHP数组的格式类似于:
array('returned_val'=> array('47483647','47483647','47483647','665414807','263901486','665414807','665414807','665414807'));
<?php
$original_arr = $_REQUEST['fb_friend_uid']['returned_val'];
如果是JSON字符串:
假设JSON字符串的格式类似于:
{ “returned_val”:[ “47483647”, “47483647”, “47483647”, “665414807”, “263901486”, “665414807”, “665414807”, “665414807”]}
<?php
$json_arr = json_decode($_REQUEST['fb_friend_uid'], True);
$original_arr = $json_arr['returned_val'];
然后,使用此代码:
<?php
// Extract only whole number values, omit anything which is not a 0-9 character.
$filtered_arr = array_filter($original_arr, 'ctype_digit');
// Escape values to remove possibility of SQL injection.
$filtered_arr = array_map('mysql_real_escape_string', $filtered_arr);
// Convert the array to a string
$string_arr = "'" . implode("','", $filtered_arr) . "'";
// Perform SQL Query
mysql_query("SELECT * FROM vote WHERE vote_fb_uid IN ($string_arr)");
答案 1 :(得分:1)
只需使用is_numeric过滤数组:
$uids = array_filter($_REQUEST['fb_friend_uid'], 'is_numeric');
答案 2 :(得分:0)
要过滤数字,您可以使用is_numeric( mixed $var )。
但是如果你需要更多控制(只有某种类型,长度的整数),你可以使用REGEX或is_numeric和一些ifs。
答案 3 :(得分:-3)
这看起来像一个json字符串,因此请使用http://php.net/json_decode
也许您需要在开头删除Array
(但我不知道Array是否在变量中是实际的),请使用http://php.net/substr
$jsonString = substr($_REQUEST['fb_friend_uid'], 5);
$fb_friend_uid = json_decode($jsonString);
$ids = join(',', $fb_friend_uid['returned_val']);