带状阵列

时间:2012-11-11 09:03:05

标签: php arrays character-encoding

我有以下数组:

[0] => Array
        (
            [0] => 3,38 m
            [1] => 13,30 s
            [2] => 5,41 m
            [3] => ESE
            [4] => 294º
            [5] => 32,76 km/h
            [6] => W
            [7] => 266º
            [8] => 16,27 ºC
            [9] => 12,80 ºC
            [10] => 0
        )

我想在将数据添加到数据库之前清理数据。

此功能几乎存在,但不会删除特殊字符:

function cleanUp(&$value,$key)
{
    $cleaner2 = array("km/h"," ","m","s","º","ºC");
    $value = str_replace($cleaner2, "", $value);
}
array_walk($newArray[0],"cleanUp");

我已经考虑过对数组进行编码,但我不确定它现在有什么编码?我可以修剪数组值,但觉得它相当不优雅。

有什么想法吗?

解决方案: 我从标题中省略了字符集!

header('Content-type: application/json; charset=UTF-8');

这允许我的简单cleanUp函数在删除Â时工作,然后匹配以下cleaner2数组值:

$cleaner2 = array("km/h"," ","m","s","º","ºC","C");

2 个答案:

答案 0 :(得分:1)

你可以尝试

$data = array(
  0 => '3,38 m',
  1 => '13,30 s',
  2 => '5,41 m',
  3 => 'ESE',
  4 => '294º',
  5 => '32,76 km/h',
  6 => 'W',
  7 => '266º',
  8 => '16,27 ºC',
  9 => '12,80 ºC',
  10 => 0,
);

$c =  array("km/h"," ","m","s","º","ºC");
$data = array_map(function($v)use($c) {return mb_replace($c,"",$v);},$data);
var_dump($data);

输出

array (size=11)
  0 => string '3,38' (length=4)
  1 => string '13,30' (length=5)
  2 => string '5,41' (length=4)
  3 => string 'ESE' (length=3)
  4 => string '294' (length=3)
  5 => string '32,76' (length=5)
  6 => string 'W' (length=1)
  7 => string '266' (length=3)
  8 => string '16,27C' (length=6)
  9 => string '12,80C' (length=6)
  10 => string '0' (length=1)

功能使用

function mb_replace($search, $replace, $subject, &$count=0) {
    if (!is_array($search) && is_array($replace)) {
        return false;
    }
    if (is_array($subject)) {
        // call mb_replace for each single string in $subject
        foreach ($subject as &$string) {
            $string = &mb_replace($search, $replace, $string, $c);
            $count += $c;
        }
    } elseif (is_array($search)) {
        if (!is_array($replace)) {
            foreach ($search as &$string) {
                $subject = mb_replace($string, $replace, $subject, $c);
                $count += $c;
            }
        } else {
            $n = max(count($search), count($replace));
            while ($n--) {
                $subject = mb_replace(current($search), current($replace), $subject, $c);
                $count += $c;
                next($search);
                next($replace);
            }
        }
    } else {
        $parts = mb_split(preg_quote($search), $subject);
        $count = count($parts)-1;
        $subject = implode($replace, $parts);
    }
    return $subject;
}

Function Credit : Gumbo

答案 1 :(得分:0)

function __clean( $text )
{
    $buff = implode('[:#:]',$text);
    $buff = str_replace("","UNICODE OF $text",$buff);
    return ($buff); 
}