假设我有一个具有以下结构的数组
$array = Array(Array('a' => 'a', 'x' => $something));变量$something可以是这样的: 1-3或1,3或1-3,2-5。I如何将变量$array转换为:
情况1. $something = 1-3
$array = Array(Array('a' => 'a', 'x' => Array(1,2,3)));情况2. $something = 1,3
$array = Array(Array('a' => 'a', 'x' => Array(1,3)));案例3..$something = 1-3,2-5
$array = Array(Array('a' => 'a', 'x' => Array(1,2,3,4,5)));我试着使用preg_match,但它不起作用。你能提示我用别的东西吗?
发布于 2014-10-16 17:53:45
您正在寻找用于拆分输入字符串的explode、用于生成数组内容的range和用于合并结果的array_merge。
类似这样的东西是有效的:
<?php
$something = '1-3, 2-5';
$array = array(array('a' => 'a', 'x' => array()));
$result = array();
foreach (explode(', ', $something) as $input) {
$rangeParts = explode('-', $input);
$result = array_merge($result, range($rangeParts[0], $rangeParts[1]));
}
// contains duplicate entries because 1-3 and 2-5 overlap - use array_unique to remove duplicates or change input
$array[0]['x'] = $result;在最后一个赋值中,您可以将$result包装在array_unique中,以1:1匹配您的示例,也可以编辑输入($something)以正确反映range函数的包含/排除规则。
发布于 2014-10-16 17:48:28
你有
$array = Array(Array('a' => 'a', 'x' => $something));若要修改此数组中“x”的内容,请执行以下操作。(您不能修改$something)。
$array[0]['x'] = Array(1,2,3); 或
$array =数组(1,2,3,4,5);
发布于 2014-10-16 18:00:55
如果$something中的值始终按照您的示例所示进行排序,则可以使用以下代码
$newomething = range(substr($something, 0, 1),substr($something, -1));使用未排序的输入更新工作解决方案。以下代码将在如下所示的输入上工作
$something= '4,5,1-3,13,7-9';
$something = explode(',',$something);
$result= array();
foreach($something as $value)
{
if (strpos($value,'-') !== false)
{
$r = explode('-',$value);
$rad = range($r[0],$r[1]);
$result = array_merge($result,$rad);
}
else
{
array_push($result,$value);
}
}
sort($result);https://stackoverflow.com/questions/26401138
复制相似问题