2012-04-12 9 views
1

スプリット私はそれぞれの要素を持つ配列は、このような文字列である必要があり(爆発使って配列に配列要素の文字列)またはpreg_split()

$items[0] = "*1*x *2858* in *1* with selected image to print at *http://mysite.com/test.jpg*" 

$items[1] = "*2*x *2353* in *2* with selected image to print at *http://mysite.com/test1.jpg*" 

どのようにすることができますそれはなるように、私は第二次元配列に、この配列の要素を分割:

$items[0][quantity] == 1 
$items[0][product_id] == 2858 
$items[0][variation} == 1 
$items[0][selectedImageUrl] == "http://mysite.com/test.jpg" 

$items[1][quantity] == 2 
$items[1][product_id] == 2353 
$items[1][variation} == 2 
$items[1][selectedImageUrl] == "http://mysite.com/test1.jpg" 

ありがとうございました!


@Cal

これはあなたのコードを適用する際に、私が持っているものです。

私は私の状況にそれを適用し、これは私が持っているものです。

function parse_my_str($str){ 
    $bits = explode(' ', $str); 
    $out['selectedImageUrl'] = array_pop($bits); 
    $out['product_id'] = $bits[1]; 
    $out['variation'] = $bits[3]; 
    $bits = explode('*', $str); 
    $out['quantity'] = $bits[1]; 
    return $out; 
} 

$items = explode("||", $_SESSION['mp_shipping_info']['special_instructions']); 
foreach ($items as $i => $v) { 
    $items[$i] = parse_my_str($v); 
    print_r($items[$i]); 
} 

しかし、私は

Array ([selectedImageUrl] => *http://youparkrudely.com/files/2012/04/2011-Aston-Martin-Rapide-026.jpg* [product_id] => *2858* [variation] => *1* [quantity] => 1) Array ([selectedImageUrl] => [product_id] => [variation] => [quantity] =>) 
用に更新

@Cal

Array ( 
[selectedImageUrl] => *http://youparkrudely.com/files/2012/04/2011-Aston-Martin-Rapide-026.jpg* 
[product_id] => *2858* 
[variation] => *1* 
[quantity] => 1) 
Array ([selectedImageUrl] => [product_id] => [variation] => [quantity] =>) 

答えて

1

を持っています新しい文字列、preg_match() insteaを使用D:あなたたとえば

$str = "*1*x *2858* in *1* with selected image to print at *http://mysite.com/test.jpg*"; 
$arr = parse_my_str($str); 
print_r($arr); 

function parse_my_str($str){ 
    preg_match_all('!\\*(.*?)\\*!', $str, $m); 
    return array(
    'quantity' => $m[1][0], 
    'product_id' => $m[1][1], 
    'variation' => $m[1][2], 
    'selectedImageUrl' => $m[1][3], 
); 
} 

は、あなたがこのような関数を使用したい:これらの線に沿って

foreach ($items as $k => $v) $items[$k] = parse_my_str($v); 
+0

本当にありがとうございました@Calを。上記の結果を掲載しました。どうぞご覧ください。 – mdo

+0

これがあなたの質問に答えた場合、それを受け入れて投票してください – Cal

+0

あなたの結果を投稿した場所は表示されません... – Cal

0
<?php 
$items[0] = "*1*x 2858 in 1 with selected image to print at http://mysite.com/test.jpg"; 
$items[1] = "*2*x 2353 in 2 with selected image to print at http://mysite.com/test1.jpg"; 

foreach ($items as $key=>$item){ 
    $temp = explode(" ", $item); 
    $items[$key] = array(); 
    $items[$key]['quantity'] = $temp[0]; 
    $items[$key]['product_id'] = $temp[1]; 
    $items[$key]['variation'] = $temp[3]; 
    $items[$key]['selectedImageURL'] = $temp[10]; 
} 

print_r($items); 

何かが動作するはずです。もちろん、あなたの数量とバリエーションは同じままです。

+0

'explode()'は2つの引数をとりますが、このコードは質問が尋ねていることをしません。 – Cal

+0

はい、私は実現した前に投稿をクリックしました。私の間違い – Mansfield

+0

申し訳ありませんが、まだ動作しません:http://codepad.org/TcgGbaZn – Cal

1

preg_match()ソリューションと正規表現を使用できます。私がものと正確にマッチしたかどうかは分かりませんが、ここでは単純な例です。

// Regular Expression 
$pattern = '/^\*(\d+)\*x (\d+) in (\d+) with selected image to print at (.+)$/'; 
preg_match($pattern, $string, $matches); 

あなたはvar_dump()$matchesあなたがこれを買ってあげる場合:あなたはアイテムのあなたの配列をループしています

array(5) { 
[0]=> string(74) "*2*x 2353 in 2 with selected image to print at http://mysite.com/test1.jpg" 
[1]=> string(1) "2" 
[2]=> string(4) "2353" 
[3]=> string(1) "2" 
[4]=> string(27) "http://mysite.com/test1.jpg" 
} 

foreach ($array as $key => $value) : 

    preg_match($pattern, $value, $matches); 

    $items[$key]['quantity'] = $matches[1]; 
    $items[$key]['product_id'] = $matches[2]; 
    $items[$key]['variation'] = $matches[3]; 
    $items[$key]['selectedImageURL'] = $matches[4]; 

endforeach; 

私はカスタム機能も提案します。

あなたが正規表現にいくつかの助けが必要な場合、私はここに始まるお勧め:http://www.regular-expressions.info/

関連する問題