好的,这很奇怪,但我需要它
我正在尝试在一些特定引号之间获取大量代码的字符数。“基本上我需要能够在开头的第3个引号和结尾的第5个引号之间获取所有内容。
所以这是一个例子
a:2:{s:10:"categories";s:5758:"...........";s:5:"posts";s:6:"a:0:{}";}
我需要知道所有时期的字符数。实际上有代码代替那些时期。
因为有11个句点,所以我的字符数将是11.唯一一致的是这里的引号所以我需要根据它。
任何帮助都会很棒。
这是我的代码。我基本上是在创建代码并添加一些自定义标签。在我反序列化之前,我尝试先将代码序列化,但这似乎不起作用。
<?
$thisisit .= 'a:2:{s:10:"categories";s:5481:"a:40:{';
include('connect.php');
$sql = "SELECT * FROM wp_terms ORDER BY term_id ASC LIMIT 40";
$result = mysql_query($sql);
$count = 0;
while($row = mysql_fetch_array($result)) {
$name = $row['name'];
$charactercount = strlen($name);
$term_id = $row['term_id'];
$thisisit .= 'i:'.$count.';a:2:{s:11:"filter_name";s:20:"add_keyword_category";s:11:"filter_args";a:7:{s:12:"filter_value";s:'.$charactercount.':"'.strtolower($name).'";s:19:"filter_search_title";s:1:"1";s:21:"filter_search_excerpt";i:0;s:21:"filter_search_content";s:1:"1";s:21:"faf_filter_categories";a:1:{i:4;s:3:"'.$term_id.'";}s:17:"filter_match_word";i:0;s:17:"filter_match_case";i:0;}}';
//echo "<br><br>";
$count++;
}
$thisisit .= '}";s:5:"posts";s:6:"a:0:{}";}';
$array = unserialize($thisisit);
echo strlen($array['categories']);
?>
答案 0 :(得分:2)
实际上这些数据看起来是序列化的。正确的解决方案是使用php函数unserialize
。
然后,根据您的结构,知道该元素的长度:
strlen(unserialize($data)['categories']);
如果你运行旧的php,你需要将结果存储在一个临时变量中:
$array = unserialize($data);
echo strlen($array['categories']);
如果您的序列化数据已损坏(如“未正确执行serialize
”),正如您的示例所示,我们可以返回原始任务:< / p>
在开头的第3个引号和结尾的第5个引号之间获取所有内容
实现这一目标的最简单方法是:
implode("'", array_slice(explode("'", $data), 3, -5));