preg_match от начала массива до обратной косой черты - PullRequest
2 голосов
/ 07 марта 2012

Может ли кто-нибудь объяснить, как использовать php preg_match, чтобы разбить строку на массив, от начала строки до первого обратного слеша?

У меня есть массив:

(
    [0] => s00473276\Soul To Squeeze\Red Hot Chili Peppers
    [1] => t00034422\Soul To Squeeze\Red Hot Chili Peppers
    [2] => 209676\Soul To Squeeze\Red Hot Chili Peppers
    [3] => s00473331\What Is Soul ?\Red Hot Chili Peppers
    [4] => 209672\Show Me Your Soul\Red Hot Chili Peppers
    [5] => t00034415\Show Me Your Soul\Red Hot Chili Peppers
    [6] => s00473268\Show Me Your Soul\Red Hot Chili Peppers
    [7] => s00473233\Out Of Range By Red Hot Chili Peppers\Red Hot Chili Peppers
    [8] => 209603\Get On Top\Red Hot Chili Peppers
    [9] => t00034374\I've Been Down\Red Hot Chili Peppers
)

И я хочу создать еще один массив, поэтому у меня останется

[0] => s00473276
[1] => t00034422 etc...

Ответы [ 6 ]

2 голосов
/ 07 марта 2012

Почему preg_match()?Использование substr() вместе с array_map() будет быстрее.

array_map('f', $array);

function f($s)
{
  return substr($s, 0, strpos($s, '\\'));
}
2 голосов
/ 07 марта 2012
$new_array = array();
foreach($your_array as $element)
  list($new_array[]) = explode('\\', $element);

print_r($new_array);
2 голосов
/ 07 марта 2012

Самое простое / «самое чистое» (предупреждение: субъективное) решение, вероятно, array_map() и explode():

<?php

$array = array('s00473276\Soul To Squeeze\Red Hot Chili Peppers',
               't00034422\Soul To Squeeze\Red Hot Chili Peppers',
               '209676\Soul To Squeeze\Red Hot Chili Peppers',
               's00473331\What Is Soul ?\Red Hot Chili Peppers',
               '209672\Show Me Your Soul\Red Hot Chili Peppers',
               't00034415\Show Me Your Soul\Red Hot Chili Peppers',
               's00473268\Show Me Your Soul\Red Hot Chili Peppers',
);

function myFunc($item) {
        $parts = explode('\\', $item, 2);

        return $parts[0];
}

$newArray = array_map('myFunc', $array);

print_r($newArray);

Вывод:

Array
(
    [0] => s00473276
    [1] => t00034422
    [2] => 209676
    [3] => s00473331
    [4] => 209672
    [5] => t00034415
    [6] => s00473268
)

( демо )

1 голос
/ 07 марта 2012

Вы можете сделать:

$arr = array();
foreach($yourArray as $key => $value){
  $split = explode('\\', $value);
  $arr[$key] = $split[0];
}

print_r($arr);
0 голосов
/ 07 марта 2012

Это с preg_match

$result = array();
foreach ($a as $value) {
    preg_match("#([^\\\\]*)\\\\#", $value, $match);
    $result[] = $match[1];
}
0 голосов
/ 07 марта 2012

Попробуйте с:

$input  = array( /* your data */ );
$output = array();
foreach ( $input as $value ) {
  $output[] = str_split($value, 0, substr($value, '/'));
}
...