由于某种原因,我有一个这样的数组,我想提取每个键的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
)
感谢您的帮助
答案 0 :(得分:2)
您可以使用以下功能执行此操作:
implode
— Join array elements with a string explode
— Split a string by string array_slice
— Extract a slice of the array 示例:强>
$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>';