Neden benim dizideki virgül bir dize olarak okuyorsun?

8 Cevap php

Ben bunu yapmaya çalışıyorum budur:

1 - Ben bir dize ile bir dizi var.

$photographer_array = "'Alberto Korda', 'Annie Leibowitz', 'Ansel Adams'";

2 - Ben bu dize ile bir dizi doldurmak için çalışıyorum.

array($photographer_array);

Ne yaptığını bütün virgüller dahil tek bir kayıt ile bir dizi yaratıyor. Neden bir dize olarak virgül okuyor? Ben bir dize olarak virgül okumak ve yerine dizideki değerleri ayırmak için bunları kullanmayın yapabilirsiniz yine de var mı?

8 Cevap

Maalesef söylemek, ama dizeleri genellikle ayrıştırılır ve idam değil çünkü sen, bir dizide bu şekilde dolduramıyor. Yapabileceğiniz tek şey:

$photographer_array = array('Alberto Korda', 'Annie Leibowitz', 'Ansel Adams');

Ya da bu (EDIT: sorgu koduna uyarlanmıştır):

$photographer_array = array();

while ($photographer_row = $result->fetch_assoc()) {
    $photographer_array[] = $photographer_row['photographer_name'];
}

PS: Sen sadece, uzun değişken isimleri seviyorsun değil mi? ;)

$photographer_array is bir dize kullanarak ve array($photographer_array) sadece dizi için dize koyar olmasıdır.

Belki de yapmak istiyorum:

$photographer_array = explode(',', "'Alberto Korda', 'Annie Leibowitz', 'Ansel Adams'");

Bu size verecektir

array(3) {
  [0]=>
  string(15) "'Alberto Korda'"
  [1]=>
  string(18) " 'Annie Leibowitz'"
  [2]=>
  string(14) " 'Ansel Adams'"
}

Veya istediğiniz:

$photographer_array = array('Alberto Korda', 'Annie Leibowitz', 'Ansel Adams');
// ...

EDIT:

Deftere kodu ile ilgili - şu size bir dizi verecek $photographer_row['photographer_name']:

// ...
$photographer_array = array();
while($photographer_row = $result->fetch_assoc()) {
    $photographer_array[] = $photographer_row['photographer_name'];
}

Im aslında ben bu şekilde yapıyorum, neden sadece bu yüzden bildiğiniz bir sorgudan değerleri kullanarak bir dizi oluşturmak. Bu benim dizide kullanılmak üzere dize oluşturmak için kullanıyorum kodudur.

$sql = "SELECT photographers.photographer_name
    	FROM photographers
    	ORDER BY photographer_name ASC
    	LIMIT 3";

$result = $conn->query($sql) or die(mysqli_error());

$photographer_array = '';

while($photographer_row = $result->fetch_assoc()) {
$photographer_array .= "'" . $photographer_row['photographer_name'] . "', ";
}

$photographer_array = rtrim($photographer_array, ", ");

array($photographer_array);

Bu tırnak (") içinde kapalı becuase bir dize olarak dize okuyor bunu doğru yapmak istiyorsanız, deneyin.:

$array = array('Alberto Korda', 'Annie Leibowitz', 'Ansel Adams');

Veya:

$string = "Alberto Korda, Annie Leibowitz, Ansel Adams"; $arr = explode(',', $string);

Eğer değişken $photographer_array tek bir dize (çift tırnak arasındaki her şeyin olduğu değer) ayarlanmış olduğunu fark edeceksiniz. Php dizi işlevi virgülle ayrılmış nesnelerin bir listesini kabul eder. Virgül sizin $photographer_array değişkene varken, onlar yerine gerçek ayraçları daha dize karakter olarak kabul edilir, bu yüzden gerçekten sadece bir dize olur tek bir değere sahip bir dizi oluştururken. Ne muhtemelen istediğiniz şudur:

$photographer_array = array('Alberto Korda', 'Annie Leibowitz', 'Ansel Adams');

Bir dizi yararlanmak için bir dize gerekirse:

$ Photographer_array = "'Alberto Korda', 'Annie Leibowitz', 'Ansel Adams'";

eval("\$myArray = array(" . $photographer_array . ");");

Ve kullandıktan sonra $myArray

Eğer PHP> = 5.3.0 erişimi var ise, o zaman bir diziye virgülle ayrılmış dize ayrıştırma, str_getcsv kullanabilirsiniz.

Explode() ne ihtiyaç vardır ...

http://php.net/manual/en/function.explode.php