2013-05-06 2 views
-3

По какой-то причине у меня есть такой массив, и я хочу извлечь 2-ю первую часть каждого ключа. Некоторые из ключей содержат 5 строк строки, разделенных символом ',' тогда как другие содержат 2 части строки разделены Я. «» Ex:Извлечь часть значений ключей в массиве php

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 
) 

Благодарим за помощь.

ответ

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' 

That StrI Затем ng добавляется к $newArray.

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>'; 
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); 
+0

Связанный: [Что такое официальный этикет при ответе на вопрос дважды] (http://meta.stackexchange.com/questions/25209/what-is-the- официально-этикет-на-ответив-а-вопрос-два раза) – Gordon

Смежные вопросы