2013-02-28 13 views
8

$thestring = "1,2,3,8,2" gibi bir dizem var.Virgülle ayrılmış tam sayıları intvanlara mı kullansın?

explode(',', $thestring) ise, bir dizi dizim alıyorum. Bunun yerine bir tam sayı dizisine nasıl patlayabilirim? Böyle

+0

Dizginiz tamsayılar ve yalnızca virgül içerecek? –

+0

@User, yalnızca tam sayı ve virgül, başka bir şey yok –

+1

Bu iletiyi kontrol edin: http://stackoverflow.com/questions/9593765/how-to-convert-array-values-from-string-to-int –

cevap

9

Kullanım şey: $ İpi bir dizedir

$data = explode(',', $thestring); 
array_walk($data, 'intval'); 

http://php.net/manual/en/function.array-walk.php

+0

Evet, hatalı olduğumu fark ettim ve onu düzeltecektim. Ama ben PHP belgelerini kafa karıştırıcı buluyorum, ilk argüman için callable diyor. –

+2

@AmigableClarkKant, bağlantıya bakın, hecelenebilir, ikincisi dizidir. Ama neyse, evet, bu en büyük PHP sorunlarından biridir. Bazı işlevler alt çizgi ile, bazıları yoktur. Bazılarının bir emri var, diğerleri ters. Garip. –

+0

@ ProfFalken, ben dizi_map düşünür düşünüyorum? – MJoraid

0

yana o zaman dizelerden oluşan bir dizi alacak.

Sadece patlatılmış değerlerin önüne (int) ekleyin.

Ya array_walk işlevini kullanın: (PHP işleme döküm dizeleri ile genellikle iyidir ve/int yüzer), ama gerçekten gerekmez Çoğunlukla

$arr = explode(',', $thestring); 
array_walk($arr, 'intval'); 
+0

bu bağlantıyı kontrol etmek için çalışmıyor http://codepad.org/WwpN4J2x – Kathir

0

kesinlikle gerekli ise, Eğer intval veya floatval ile array_walk yapabilirsiniz: biraz daha ayrıntılı bir şeye ihtiyacım olursa

$arr = explode(',','1,2,3'); 
// use floatval if you think you are going to have decimals 
array_walk($arr,'intval'); 
print_r($arr); 

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
) 

, ayrıca settype içine bakabilirsiniz:

$arr = explode(",","1,2,3"); 
function fn(&$a){settype($a,"int");} 
array_walk($f,"fn"); 
print_r($f); 

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
) 
dinamik döküm çalışıyorsanız özellikle yararlı olabilir

:

class Converter { 
    public $type = 'int'; 
    public function cast(&$val){ settype($val, $this->type); } 
} 
$c = new Converter(); 

$arr = explode(",","1,2,3,0"); 
array_walk($arr,array($c, 'cast')); 
print_r($arr); 

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 0 
) 

// now using a bool 
$c->type = 'bool'; 
$arr = explode(",","1,2,3,0"); 
array_walk($arr,array($c, 'cast')); 
var_dump($arr); // using var_dump because the output is clearer. 

array(4) { 
    [0]=> 
    bool(true) 
    [1]=> 
    bool(true) 
    [2]=> 
    bool(true) 
    [3]=> 
    bool(false) 
} 
1
$thestring = "1,2,3,8,a,b,2"; 

$newArray = array(); 
$theArray = explode(",", $thestring); 

print_r($theArray); 

foreach ($theArray as $theData) { 
    if (is_numeric($theData)) { 
    $newArray[] = $theData; 
    } 
} 

print_r($newArray); 

// Çıktı

Orijinal dizi

Array ([0] => 1 [1] => 2 [2] => 3 [3] => 8 [4] => a [5] => b [6] => 2) 

Yalnızca sayısal dizi

de kullanılabilir 210
Array ([0] => 1 [1] => 2 [2] => 3 [3] => 8 [4] => 2) 
17

array_map:

$s = "1,2,3,8,2"; 
$ints = array_map('intval', explode(',', $s)); 
var_dump($ints); 

Çıkış:

array(5) { 
    [0]=>  int(1) 
    [1]=>  int(2) 
    [2]=>  int(3) 
    [3]=>  int(8) 
    [4]=>  int(2) 
} 

Örnek codepad.

1
$arr=explode(',', $thestring); 
$newstr = ''; 
foreach($arr as $key=>$val){ 
    $newstr .= $val; 
} 
+2

Beklenen sonucu vereceğini sanmıyorum 12382 gibi bir dizi üretin. – biziclop