在数组php中提取键值的一部分

时间:2013-05-06 09:27:04

标签: php arrays extract

由于某种原因,我有一个这样的数组,我想提取每个键的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  
) 

感谢您的帮助

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);

答案 2 :(得分: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>';