-3

出于某种原因,我有一个这样的数组,我想提取每个键的前 2 部分,一些键包含 5 个由 ',' 分隔的字符串,而另一些包含 2 个由 ya ',' 分隔的字符串前任:

array (
    'kksgzgg , kdhdhk',
    'jjj , jjd , jsjs , sjsj , jjsjs',
    'kksksk , kdkdkk',
    'jjj , jjd , jdjdjdj , jjd , jdjdjddj',
    'jjj , jjd , jdjdj , jjsj , sjsjsj',
    'jjj , jjd'
);

结果我需要一个这样的结果,每个键中只有 2 个元素(用逗号分隔):

Array ( 
    [0] => kksgzgg , kdhdhk 
    [1] => jjj , jjd  
    [2] => kksksk , kdkdkk  
    [3] => jjj , jjd  
    [4] => jjj , jjd  
    [5] => jjj , jjd  
) 

谢谢您的帮助

4

3 回答 3

2

您可以使用以下功能来做到这一点:

例子:

$newArray = array();
foreach ($oldArray as $value) {
    $newArray[] = implode(',', array_slice(explode(',', $value, 3), 0, 2));
}

print_r($newArray);

输出:

Array
(
    [0] => kksgzgg , kdhdhk
    [1] => jjj , jjd 
    [2] => kksksk , kdkdkk
    [3] => jjj , jjd 
    [4] => jjj , jjd 
    [5] => jjj , jjd
)

解释:

里面的代码foreach可以用临时变量重写,这可能更容易理解发生了什么。下面的代码等价于上面的单行代码:

$parts         = explode(',', $value, 3);
$subsetOfParts = array_slice($parts, 0, 2);
$gluedTogether = implode(',', $subsetOfParts);
$newArray[]    = $gluedTogether;

这四行在foreach. 假设我们为此这样做$value

'jjj , jjd , jsjs , sjsj , jjsjs'

第一行将用逗号分隔值。第三个参数3控制你将获得多少元素$parts

[0 => 'jjj ', [1] => ' jjd ', [2] => ' jsjs , sjsj , jjsjs']

第二行将创建一个新数组,$parts其中仅包含第一个和第二个元素,因此结果将是

[0 => 'jjj ', [1] => ' jjd ']

第三行将用逗号将部分子集粘合在一起,所以你得到

'jjj , jjd'

然后将该字符串添加到$newArray.

于 2013-05-06T09:30:10.337 回答
2

我的其他解决方案的替代方法是使用

例子:

$newArray = preg_replace(
    '/
        (             # capture any string
            [^,]*     # that is not a comma
            ,         # up to a comma
            [^,]*     # followed by any character not a comma
        )             # into group $1
        .*            # followed by any amount of characters
    /x',
    '$1',
    $oldArray
);

没有内联文档:

$newArray = preg_replace('/([^,]*,[^,]*).*/', '$1', $oldArray);
于 2013-05-06T10:22:19.610 回答
0

尝试这个:

$clean_array = array();

foreach($array as $value) {
    $clean_array[] = implode(',', array_slice(explode(',' $value), 0, 2);
}

echo '<pre>', print_r($clean_array, true), '</pre>';
于 2013-05-06T09:35:15.947 回答