JSON编码为两个变量PHP

时间:2017-09-28 19:10:04

标签: php arrays json

我从我的cookie中获取了这些值:

a:2:{i:0;s:22:"302260 302250 302248";i:1;s:38:"Bruce Willis Jackie Chan Gary Oldman";}

我需要将这些数据分开,如下所示:

$variable1 = [302260,302250,302248];
$variable2 = [Bruce Willis, Jackie Chan, Gary Oldman];

json_decode返回NULLunserialize返回:

array ( 0 => '302260 302250 302248', 1 => 'Bruce Willis Jackie Chan Gary Oldman')

现在我不知道如何将名称分解为["Bruce Willis", "Jackie Chan", "Gary Oldman"]

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式尝试此操作。这是一个关于如何使其发挥作用的简单示例。

string = 'a:2:{i:0;s:20:"302260 302250 302248";i:1;s:36:"Bruce Willis Jackie Chan Gary Oldman";}';
$unserialized = unserialize($string);

// simple explode for the numbers
$variable1 = explode(" ", $unserialized[0]);

// here it gets harder, to get the result you could use some regex
// this regex will match a word+space+word. With preg_match_all you will get all those occurrences 
preg_match_all("/[\w]+\s[\w]+/", $unserialized[1], $matches);

$variable2 = $matches[0];

var_dump($variable1);
var_dump($variable2);

如果名称不总是由空格分隔的两个单词组成,那么这可能会变得更加困难。

在这种情况下,您可以针对某些数据库进行检查,如果您有一个包含这些值的数据库。可以说,这些值来自一些存储的用户数据,您可以将其用作检查。

如果姓名可以用大写/小写写成任何类型的字符,那么你可能完全没有运气。

想象一下像bOb lärson james baldwin jOhn franK frankenstein这样的数据。你能看出哪些名字在一起吗?

即使使用包含所有名称的全名数据库,也不会100%准确,因为有时也可以将姓氏用作姓氏。