0

次の可能な形式の文字列があります。

"John|Smith,Bob,Bill|Smith」など

したがって、これらはカンマで区切られたペアであり、それ自体が | で分割されます。

各セクション (コンマで区切られている) は、| で区切られた 1 つまたは 2 つの部分を持つことができます。

これを次のような連想配列に変換する最良の方法が欲しいです。

array(
   array(
       'firstname' => "Bill"
       'lastname' => "Smith"
   ),
   array(
       'firstname' => "Bob"
   ),
   array(
       'firstname' => "Bill"
       'lastname' => "Smith"
   ),
)
4

4 に答える 4

0

次のようなことができます。

$values = "John|Smith,Bob,Bill|Smith";

$result = array_map(function($elem) {
    $parts = explode('|', $elem);

    $output = array('firstname' => $parts[0]);

    if (isset($parts[1]))
    {
        $output['lastname'] = $parts[1];
    }

    return $output;

}, explode(',', $values));

var_dump($result);

出力は次のとおりです。

array
  0 => 
    array
      'firstname' => string 'John' (length=4)
      'lastname' => string 'Smith' (length=5)
  1 => 
    array
      'firstname' => string 'Bob' (length=3)
  2 => 
    array
      'firstname' => string 'Bill' (length=4)
      'lastname' => string 'Smith' (length=5)
于 2013-03-06T12:03:10.903 に答える
0
$result = array();
$input = "John|Smith,Bob,Bill|Smith";

foreach (explode(',', $input) as $data) {
    if (false !== strpos($data, '|')) {
        list($firstname, $lastname) = explode('|', $data, 2);
        $result[] = array(
            'firstname' => $firstname,
            'lastname' => $lastname,
        );
    } else {
        $result[] = array(
            'firstname' => $data,
        );
    }
}

print_r($result);

出力

Array
(
    [0] => Array
        (
            [firstname] => John
            [lastname] => Smith
        )

    [1] => Array
        (
            [firstname] => Bob
        )

    [2] => Array
        (
            [firstname] => Bill
            [lastname] => Smith
        )

)
于 2013-03-06T11:54:27.417 に答える