【问题标题】:how to save numbers only from an array into a new array如何仅将数组中的数字保存到新数组中
【发布时间】:2013-05-29 07:02:44
【问题描述】:

我目前有 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 以仅包含数字。 有什么建议吗?

【问题讨论】:

  • 试试foreach ($REQUEST['fb_friend_uid']->returned_val as $uid)....

标签: php arrays foreach


【解决方案1】:

我不能给你一个确切的解决方案,因为我不确定$_REQUEST['fb_friend_uid']返回的值是使用json_encode()打印的PHP数组,还是这个值实际上是一个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)");

【讨论】:

  • 嗨 Joshua,您的建议实际上可以解决我上面描述的问题 - 所以接受您的回答 - 我发现我在这里所做的描述是基于完全错误的数据,所以尝试了其他方法。再次感谢您的贡献!
【解决方案2】:

只需使用is_numeric 过滤数组:

$uids =  array_filter($_REQUEST['fb_friend_uid'], 'is_numeric');

【讨论】:

    【解决方案3】:

    要过滤数字,您可以使用is_numeric( mixed $var )

    但如果您需要更多控制(仅限特定类型、长度的整数),您可以使用 REGEX 或 is_numeric 以及一些 ifs。

    【讨论】:

    • 而不是使用正则表达式,我建议使用 PHP 的内置方法来确定给定值是否为整数:ctype_digit()
    【解决方案4】:

    这看起来像一个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']);
    

    【讨论】:

      猜你喜欢
      • 2015-10-17
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 2018-03-04
      相关资源
      最近更新 更多