Nasıl o dizinin bir dize gösterimine gelen bir dizi oluşturur?

6 Cevap php

Ben dizi $ result_array oluşturmak istiyorum. Orada sayfada hata değil, ama işleri!

that not works !

//BOF: Result Array
 $result_array = '';
 $result_array .= '"messages" => "' . $errors .'",';
 $result_array .= '"this_addr_type" => "' . (int)$_REQUEST['edit'] .'",';
if (ACCOUNT_GENDER == 'true') {
 $result_array .= '"gender_male" => "' . $male .'",';
 $result_array .= '"gender_female" => "' . $female .'",';
}
 $result_array .= '"firstname" => "' . $entry['entry_firstname'] .'",';
 $result_array .= '"lastname" => "' . $entry['entry_lastname'] .'",';
if (ACCOUNT_COMPANY == 'true') {
 $result_array .= '"company" => "' . $entry['entry_company'] .'",';
}
 $result_array .= '"street_address" => "' . $entry['entry_street_address'] .'",';
if (ACCOUNT_SUBURB == 'true') {
 $result_array .= '"suburb" => "' . $entry['entry_suburb'] .'",';
}
 $result_array .= '"postcode" => "' . $entry['entry_postcode'] .'",';
 $result_array .= '"city" => "' . $entry['entry_city'] .'",';
if (ACCOUNT_STATE == 'true') {
 $result_array .= '"state" => "' . $entry['entry_state'] .'",';
}
 $result_array .= '"country" => "' . $entry['entry_country_id'] .'"';
//EOF: Result Array

  $_RESULT = array($result_array);

that works

$_RESULT = array(
 "this_addr_type" => (int)$_REQUEST['edit'],
 "gender_male" => $male,
 "gender_female" => $female,
 "firstname" => $entry["entry_firstname"],
 "lastname" => $entry["entry_lastname"],
 "company" => $entry["entry_company"],
 "street_address" => $entry["entry_street_address"],
 "suburb" => $entry["entry_suburb"],
 "postcode" => $entry["entry_postcode"],
 "city" => $entry["entry_city"],
 "state" => $entry["entry_state"],
 "country" => $entry["entry_country_id"]
);

6 Cevap

Eğer kod olarak bir dize tedavi PHP almak için çalışıyoruz çünkü. http://php.net/manual/en/function.eval.php: Bunu ZORUNLU ama eğer eval arıyoruz - Benim soru "neden" olacaktır

// untested
$_RESULT = eval("return " . "array($result_array)" . ";");

Muhtemelen size loking konum sonucu verecektir.

Gerçek qusetion neden sadece bu yapmıyorlar edilir:

if (ACCOUNT_GENDER == 'true') {
 $result_array['gender_male'] = $male;
 $result_array['gender_female'] = $female;
}

İlk örnek sadece bir gerçekten büyük bir dize içeren bir dizi oluşturur. "=>" S o dizeye dahil edilir ve yeni bir dizi elemanı oluşturmak için yorumlanmaz. Ikinci örneğe bakın. Tırnak içinde oraya "=>" ler vardır?

Siz zaten kendi sorusunu yanıtladı. İlk çalışamaz. Sadece uzun bir dize oluşturmak ve daha sonra bir diziye tek bir öğe olarak bu dizeyi sopa vardır.

Ama iki örneklere bakarak ben böyle bir şey yapmak isteyen konum varsayalım:

$result_array = array();
if($somecondition) {
  $result_array = array_merge($result_array, array("entry1" => "data1", "entry2" => "data2"));
}
if($someothercondition) {
  $result_array = array_merge($result_array, array("other_entry" => "more_data"));
}
$_RESULT = $result_array;

Böyle PHP dizi oluşturabilirsiniz:

$array = array();

veya

$array[] = 'whatever';

Ama kod, kullandığınız:

$result_array .= '"messages" => "' . $errveyas .'",';

PHP dizi oluşturmak için değil nasıl olduğunu.

Neden bunu yapmak için çalışıyoruz? Eğer bir yerde metindeki dizi depolamak? Okunabilir bir insan olması gerek yoksa, bakmak gerekir:

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

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



// $_RESULT as a string
$str = serialize($_RESULT);

// Back as an array
$arr = unserialize($str);

PHP bu şekilde çalışmıyor. Bir dize her zaman kullanmak istediğiniz gerçek bir şey eşdeğer değildir.