我编写了一个使用内置json_encode();
函数制作的数组.我需要它的阵列数组格式,如下所示:
[["Afghanistan",32,12],["Albania",32,12]]
Run Code Online (Sandbox Code Playgroud)
但是,它将返回:
["2":["Afghanistan",32,12],"4":["Albania",32,12]]
Run Code Online (Sandbox Code Playgroud)
如何在不使用任何正则表达式技巧的情况下删除这些行号?
标题基本概括了所有内容.
如果我有类似的东西(从PHP站点示例):
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<movies></movies>
XML;
$sxe = new SimpleXMLElement($xmlstr);
$sxe->addAttribute('type', 'documentary');
$movie = $sxe->addChild('movie');
$movie->addChild('title', 'PHP2: More Parser Stories');
$movie->addChild('plot', 'This is all about the people who make it work.');
$characters = $movie->addChild('characters');
$character = $characters->addChild('character');
$character->addChild('name', 'Mr. Parser');
$character->addChild('actor', 'John Doe');
$rating = $movie->addChild('rating', '5');
$rating->addAttribute('type', 'stars');
echo("<pre>".htmlspecialchars($sxe->asXML())."</pre>");
die();
Run Code Online (Sandbox Code Playgroud)
我最终输出一个长字符串,如下所示:
<?xml version="1.0" standalone="yes"?>
<movies type="documentary"><movie><title>PHP2: More Parser Stories</title><plot>This is all about the people who make it work.</plot><characters><character><name>Mr. Parser</name><actor>John Doe</actor></character></characters><rating type="stars">5</rating></movie></movies>
Run Code Online (Sandbox Code Playgroud)
这对于程序使用者来说很好,但是对于调试/人工任务,有没有人知道如何将它变成一个漂亮的缩进格式?
什么是获取JSON或Array对象并将其转换为XML的最简单方法.也许我正在寻找所有错误的地方,但我找不到一个合适的答案让我顺利完成它.这是我必须以某种方式建立自己的东西吗?或者是否有类似json_encode/json_decode的东西将采用数组或json对象并将其作为xml对象弹出?
我想知道在PHP(或一些广泛使用的PHP库)中是否存在能够将关联数组转换为XML文档的函数.
我搜索了很多,只能找到不输出有效XML的函数.我相信我正在测试它们的数组是正确构造的,因为它可以正确地用于使用json_encode生成JSON文档.但是,它相当大,它嵌套在四个级别,这可以解释为什么我迄今为止尝试过的函数都失败了.
最后,我将编写代码来自己生成XML,但肯定必须有更快的方法来实现这一点.
要简单地检查数组是否包含某个值,我会这样做:
{% if myVar in someOtherArray|keys %}
...
{% endif %}
Run Code Online (Sandbox Code Playgroud)
但是,我的阵列是多维的.
$tasks = array(
'someKey' => 'someValue',
...
'tags' => array(
'0' => array(
'id' => '20',
'name' => 'someTag',
),
'1' => array(
'id' => '30',
'name' => 'someOtherTag',
),
),
);
Run Code Online (Sandbox Code Playgroud)
我想要的是能够检查是否$tasks['tags']
有标签ID 20.我希望我不会混淆使用PHP数组格式.
array(
name => text,
surname => text,
country => text,
date => text
)
Run Code Online (Sandbox Code Playgroud)
1)如何将此数组保存为xml文件?
2)如何读取此文件作为数组?
我尝试了什么,什么不起作用:
输入:
$d = new DOMDocument();
$d->formatOutput = true;
// Out of my control:
$someEl = $d->createElementNS('http://example.com/a', 'a:some');
// Under my control:
$envelopeEl = $d->createElementNS('http://example.com/default',
'envelope');
$d->appendChild($envelopeEl);
$envelopeEl->appendChild($someEl);
echo $d->saveXML();
$someEl->prefix = null;
echo $d->saveXML();
Run Code Online (Sandbox Code Playgroud)替换后输出无效XML:
<?xml version="1.0"?>
<envelope xmlns="http://example.com/default">
<a:some xmlns:a="http://example.com/a"/>
</envelope>
<?xml version="1.0"?>
<envelope xmlns="http://example.com/default">
<:some xmlns:a="http://example.com/a" xmlns:="http://example.com/a"/>
</envelope>
Run Code Online (Sandbox Code Playgroud)请注意,<a:some>
可能有孩子.一个解决方案是创建一个新的<some>
,和所有的孩子从复制<a:some>
到<some>
.这是要走的路吗?
在您评论这可能是重复之前,请阅读下面的粗体线.这与SimpleXML无关.
让我首先展示如何布局XML.请忽略名称空间:
<hot:SearchHotels>
<hot:request>
<hot1:Destination>?</hot1:Destination>
<hot1:HotelCityName>?</hot1:HotelCityName>
<hot1:HotelLocationName>?</hot1:HotelLocationName>
<hot1:HotelName>?</hot1:HotelName>
<hot1:CheckIn>?</hot1:CheckIn>
<hot1:CheckOut>?</hot1:CheckOut>
<hot1:RoomsInformation>
<!--Zero or more repetitions:-->
<hot1:RoomInfo>
<hot1:AdultNum>?</hot1:AdultNum>
<hot1:ChildNum>?</hot1:ChildNum>
<!--Optional:-->
<hot1:ChildAges>
<!--Zero or more repetitions:-->
<hot1:ChildAge age="?"/>
</hot1:ChildAges>
</hot1:RoomInfo>
</hot1:RoomsInformation>
<hot1:MaxPrice>?</hot1:MaxPrice>
<hot1:StarLevel>?</hot1:StarLevel>
<hot1:AvailableOnly>?</hot1:AvailableOnly>
<hot1:PropertyType>?</hot1:PropertyType>
<hot1:ExactDestination>?</hot1:ExactDestination>
</hot:request>
</hot:SearchHotels>
Run Code Online (Sandbox Code Playgroud)
在hot1下注意:RoomsInformation有RoomInfo.我应该能够发送多个RoomInfo节点.但我正在使用PHP类将数组转换为此对象以通过SOAP提交.
这是我的数组在转换为对象之前:
$param = array(
"Destination" => $destcode,
"HotelCityName" => $city,
"HotelLocationName" => "",
"HotelName" => "",
"CheckIn" => date("Y-m-d", strtotime($checkin)),
"CheckOut" => date("Y-m-d", strtotime($checkout)),
"RoomsInformation" => array (
"RoomInfo" => array(
"AdultNum" => 2,
"ChildNum" => 1,
"ChildAges" => array(
"ChildAge" => …
Run Code Online (Sandbox Code Playgroud) 我试图将数据存储在一个文本文件中,类似于使用php而不是存储到mysql数据库中的数组到文本文件中.
例如,这里是要存储在文本文件中的数据
name=>john
age=>25
location=>australia
Run Code Online (Sandbox Code Playgroud)
将它保存到文本文件之后,如何将内容输出并用php解析,因为php可以找到名称,年龄和位置并将其回显(比如解析数组)
我需要它将数据存储到文本文件中,以便可以轻松地从其他域访问,而无需位于同一个域,连接到数据库,从数据库获取数据.我正在寻找一个快速的解决方案.:)
我不确定这个功能应该考虑哪个方向,希望有人可以指出我.
我正在开发一个小型ZF2应用程序,它为客户端提供了一些API端点.它通过JSON返回一些简单的数据.
它有一个FooController
扩展BaseRestController
和AbstractRestfulController
:
FooController extends BaseRestController
{
// ....
public function getList()
{
$data = array('foo' => 'bar');
return $this->send($data);
}
}
Run Code Online (Sandbox Code Playgroud)
和:
BaseRestController extends AbstractRestfulController
{
// ...
public function send($data)
{
return new JsonModel($data);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想根据用户的选择通过XML返回相同的数据.我想我必须在我的send()
方法中做这样的事情BaseRestController
:
if ($format === 'json') {
return new JsonModel($data);
} else {
return new XmlModel($data);
}
Run Code Online (Sandbox Code Playgroud)
我查看了内置的JsonModel,它扩展Zend\View\Model\ViewModel
并添加了serialize()
将变量序列化为JSON的方法.
我想我必须写一个类似的XmlModel,但我无法弄清楚如何正确编写这个模型,以及告诉我的控制器这个新模型的正确方法是什么.
要实现这一目标需要哪些类/工厂/渲染器/策略?
我阅读了文档的创建和注册备用渲染和响应策略部分,但是所有现有解决方案都检查了Accept HTTP标头,我不需要与标头交互,客户端只需将所需格式作为路由参数传递到我的应用程序中,/rest/foo?format=json
或者 …
我有一个Laravel模板,我想根据它生成一个XML文件.
例如,结构具有名称,XPath和类型.所以XML应该如下所示:
<name>
</name>
<type>
</type>
<xpath>
</xpath>
Run Code Online (Sandbox Code Playgroud)
当然,我正在寻找能够处理关系的更复杂的东西.
那有什么工具吗?
我正在使用MySQL,所以也许有一个工具呢?或者也许是PHP脚本?
我已经尝试过搜索,我发现的所有工具都是从XSD生成HTML表单和从XSD生成通用XML的工具.
表格及其列是:
xml_document
带列的表: id
general_information
表列:id
,xml_document_id
,domain
,start_url
和'类别master_information
表列:id
,xml_document_id
,container
,和next_page
master_attribute
表列:id
,master_information_id
,name
,xpath
,和type
details_attribute
表列:id
,xml_document_id
,和type
您可能会注意到,之间的关系:
我知道如何将 XML 转换为多维 PHP 数组,我这样做:
$xml = file_get_contents('data.xml');
$data = json_decode(json_encode((array) simplexml_load_string($xml)),1);
Run Code Online (Sandbox Code Playgroud)
现在$data
是我的 PHP 数组。
但是如果我更改了该数组并想将其放回到文件中怎么办?我应该能够做相反的事情吧?但我不知道如何..
这篇文章很接近,但没有以相同的顺序返回数据:How to conversion array to SimpleXML
它不应该变得如此困难,对吧?:将多维数组转换为 XML
我有一个像这样的数组:
[0] => Array
(
[Project] => Array
(
[ExternalProjectID] => 53
[ProjectName] => Doon Creek
[Location] => Array
(
[Address] => 123 Fake Street
[City] => Toronto
[Province] => ON
[Latitude] => 43.0000
[Longitude] => -80.0000
)
[Website] => http://www.website.com/our-communities.php?newcommunity=53
[ContactInformation] => Array
(
[ContactPhone] => 555-5555
[ContactEmail] => email@email.com
[SalesOfficeAddress] => 123 Fake Street
[SalesOfficeCity] => Toronto
[SalesOfficeProvince] => ON
)
)
)
Run Code Online (Sandbox Code Playgroud)
现在我试图将其转换为 XML,就像它在数组中的样子一样,就像 Project 应该是一个包含所有内容的节点,Location 也应该是一个节点,其中包含该节点内 Location 数组内的所有内容以及 ContactInformation。
这就是我所拥有的:
$xml = new SimpleXMLElement();
$node = …
Run Code Online (Sandbox Code Playgroud)