Как указывает Джош К, это выглядит подозрительно как строка JSON. Возможно, вам следует сделать json_decode()
, чтобы получить фактические данные, которые вы ищете, все хорошо организовано в массив объектов.
РЕДАКТИРОВАТЬ: кажется, что ваша строка сама заключена в двойные кавычки "
, поэтому вам придется обрезать их, прежде чем вы сможете декодировать его как действительный JSON:
$str_json = trim($str, '"');
$guests = json_decode($str_json);
var_dump($guests);
Я получаю этот вывод с var_dump()
, так что здесь определенно допустимый JSON:
array(2) {
[0]=>
object(stdClass)#1 (4) {
["firstname"]=>
string(6) "guest1"
["lastname"]=>
string(3) "one"
["age"]=>
string(2) "22"
["gender"]=>
string(4) "Male"
}
[1]=>
object(stdClass)#2 (4) {
["firstname"]=>
string(6) "guest2"
["lastname"]=>
string(3) "two"
["age"]=>
string(2) "22"
["gender"]=>
string(6) "Female"
}
}
JSON (нотация объектов JavaScript) не равно CSV (значения, разделенные запятыми) . Это два совершенно разных формата данных, поэтому вы не можете анализировать один как другой.
Чтобы получить две строки, используйте цикл для получения ключей и значений каждого объекта, а затем создайте строки с этими значениями:
foreach ($guests as $guest) {
$s = array();
foreach ($guest as $k => $v) {
if ($k == 'gender') break;
$s[] = "$k:$v";
}
echo implode(',', $s) . "\n";
}
Вывод:
firstname:guest1,lastname:one,age:22
firstname:guest2,lastname:two,age:22
(Предполагая, что вы хотите исключить пол по какой-либо причине; в противном случае удалите строку if ($k == 'gender') break;
.)