2

如何获取包含单个字符串的数组以及逗号分隔的字符串并将逗号分隔的项目分解为单个项目?例如:

while(($row =  mysql_fetch_array($downloads_query))) {
        $product_array[] = $row['product']; 
    }

$product_array[]返回:

item 1: "10003"
item 2: "10016"
item 3: "10008, 10007, 10010"

如何将项目 3 拆分为单独的项目 3、4 和 5,以便 $product_array 返回:

item 1: "10003"
item 2: "10016"
item 3: "10008"
item 4: "10007"
item 5: "10010"
4

8 回答 8

5

爆炸() - PHP.net

根据给定的分隔符分解字符串,结果是一个数组。值得一提:如果您的字符串中没有单个分隔符,它仍然会转换为像Array ( [0] => abc ). 这意味着您甚至不需要将项目 1 和 2 转换为数组array_merge()即可正常运行。

array_merge() - PHP.net

将多个数组合并为一个数组。

$items = new array();
while(($row =  mysql_fetch_array($downloads_query))) {
    $items = array_merge($items, explode(',', $item3));
}
于 2013-05-10T06:11:44.013 回答
1
while(($row =  mysql_fetch_array($downloads_query))) {
        if(strpos($row['product'],',') > -1){
                $product_array += explode(',',$row['product']);
        } else {
                $product_array[] = $row['product']; 
        }
    }

这是快速解决方案:) 如果有逗号,它会在将其添加到您的数组之前将其爆炸。

  • 正如其他人注意到的那样, myslq_ 函数已被弃用.. 最好使用 mysqli 或 PDO 代替:)
于 2013-05-10T06:08:53.800 回答
1

你可以这样尝试:

while(($row = mysql_fetch_array($downloads_query))) {
  if(strstr($row['product'], ',')) {
    $product_array = array_merge(explode(',',$row['product']), $product_array);
  } else {
   $product_array[] = $row['product'];
  } 
}
于 2013-05-10T06:31:05.963 回答
0

您可以explode()在 php 中使用用户函数并将返回数组合并到$product_array. 像这样的东西:

$product_array = array_merge(explode(',', $commaSeperatedArray), $product_array); 
于 2013-05-10T06:09:52.710 回答
0

专业的建议是不要做你正在做的事情。您不应该在表格列中存储逗号分隔的值。这些应该在他们自己的表中,并在需要时加入。

无论如何,您可以使用扩展运算符 ( ) 无条件地将生成的数组分解并推送到永久平坦的结果数组中...

代码:(演示

$array = [
    "10003",
    "10016",
    "10008, 10007, 10010",
];

$result = [];
foreach ($downloads_query as $row) {
    array_push($result, ...explode(', ', $row['product']));
}
var_export($result);

输出:

array (
  0 => '10003',
  1 => '10016',
  2 => '10008',
  3 => '10007',
  4 => '10010',
)
于 2021-08-30T04:07:36.953 回答
-1

未经测试,但它就在这里。

function process_array($row)
{
    $result=array();
    $product=$row['product'];

    if(strpos($product, ',')!==false)
    {
        $result[]=explode(',', $product);
    }
    else
    {
        $result[]=$product;
    }

    return $result;
}

/////

$product_array=array();

while(($row =  mysql_fetch_array($downloads_query))) 
{
    $product_array=array_merge($product_array, proccess_array($row))
}

你明白了……

于 2013-05-10T06:10:13.777 回答
-1

使用preg_split()代替explode()。您可以在函数中添加任意数量的分隔符。

<?php
while(($row =  mysql_fetch_array($downloads_query))) {
        $string .= $row['product']." "; 
    }
    $product_array = preg_split( "/[;, ]/", $string);
?>
于 2013-05-10T06:14:00.097 回答
-1
$format_Arr = array("test1","test2,test2.1","test3","test4,test5,test6,test7");
$formated_arr = array();
foreach($format_Arr as $arr){
$arr1 = explode(",",$arr);
if(count($arr1)>1){
    $formated_arr = array_merge($formated_arr,explode(',',$arr));
}else{
    $formated_arr[]= $arr;
}
}
print_r($formated_arr);
于 2013-05-10T10:48:36.083 回答