我正在尝试从已发布的值创建一个php数组,然后使用json_encode来实现此目的:
[{"network_type":"facebook","network_url":"fb.com/name"},{"network_type":"twitter","network_url":"@name"},{"network_type":"instagram","network_url":"#name"}]
在json_decode之后看起来像:
array(
[0] => stdClass(
network_type = 'facebook'
network_url = 'fb.com/name'
)
[1] => stdClass(
network_type = 'twitter'
network_url = '@name'
)
[2] => stdClass(
network_type = 'instagram'
network_url = '#name'
)
)
我的php看起来像这样:
$social_data = array(
'network_type' => $this->input->post('network_type'),
'network_url' => $this->input->post('network_url')
);
因此数组不按我想要的方式分组,而是按字段名称分组:
array(
['network_type'] => array(
[0] => 'facebook'
[1] => 'twitter'
[2] => 'instagram'
)
['network_url'] => array(
[0] => 'fb.com/name'
[1] => '@name'
[2] => '#name'
)
因此json_encode的结果没有按照我想要的方式分组:
{"network_type":["facebook","twitter","instagram"],"network_url":["fb.com/name","@name","#name"]}
)
所以问题是......如何调整我的php,以便数组正确?
---这是输入字段:
<?php
foreach ($social as $key => $value) {?>
<p>
<label for="network_type"><input type="text" size="20" name="network_type[]" value="<?php echo $value -> network_type; ?>" placeholder="Social Network" /></label>
<label for="network_url"><input type="text" size="20" name="network_url[]" value="<?php echo $value -> network_url; ?>" placeholder="URL or Handle" /></label>
<a class="remNetwork" href="#">Remove</a>
</p>
<?php } ?>
----最新更新:这是太近了!----- 好吧,由于某种原因(可能是我用这种或那种方式拙劣的东西),下面两种建议的方法都没有让我在那里......但是,两种方法的混合使我接近:
这个if / loop / array设置:
$network_type = (array)$this->input->post('network_type', true);
$network_url = (array)$this->input->post('network_url', true);
$social_data = array();
if (($counter = count($network_type)) == count($network_url)){
for($i = 0;$i < $counter; $i++) {
$social_data[$i] = array(
'network_type' => $this->input->post('network_type[$i]'),
'network_url' => $this->input->post('network_url[$i]'),
);
}
}
与此输入循环配对:
<?php
foreach ($social as $key => $value) {
?>
<p>
<label for="network_type"><input type="text" size="20" name="network_type[]" value="<?php echo $value -> network_type; ?>" placeholder="Social Network" /></label>
<label for="network_url"><input type="text" size="20" name="network_url[]" value="<?php echo $value -> network_url; ?>" placeholder="URL or Handle" /></label>
<a class="remNetwork" href="#">Remove</a>
</p>
<?php } ?>
正在产生以下结果:
array(
[0] => array(
['network_type'] => FALSE
['network_url'] => FALSE
)
[1] => array(
['network_type'] => FALSE
['network_url'] => FALSE
)
[2] => array(
['network_type'] => FALSE
['network_url'] => FALSE
)
)
所以,我想如果我能弄清楚为什么这些值是错误的,那么我们就完成了! 感谢并感谢您的耐心和提前帮助...
- 再次更新---- 令我沮丧的是,我遗漏了一篇可能很重要的文章......当有多个社交网站时,咖啡脚本会动态创建表单字段:
$ ->
socialDiv = $("#social")
i = $("#social p").size() + 1
index = 0
$("#addNetwork").click ->
$("<p><label for=\"network_type[]\"><input type=\"text\" id=\"network_type[]\" size=\"20\" name=\"network_type[]\" value=\"\" placeholder=\"Social Network\" /></label><label for=\"network_url[]\"><input type=\"text\" id=\"network_url[]\" size=\"20\" name=\"network_url[]\" value=\"\" placeholder=\"URL or Handle\" /></label> <a href=\"#\" class=\"remNetwork\">Remove</a></p>").appendTo socialDiv
i++
false
$(document).on "click", ".remNetwork", ->
#$(".remNetwork").bind "click", ->
if i > 1
$(this).parent("p").remove()
i--
false
答案 0 :(得分:0)
您可以使用for
循环在将它们输入$social_data
数组时进行迭代。这将是
for($i = 0;$i < $items.length;$i++) {
$social_data[$i] = array(
'network_type' => $this->input->post('network_type[$i]'),
'network_url' => $this->input->post('network_url[$i]'),
);
生成的数组如下所示:
$social_data[0] ->
'network_type' => 'facebook',
'network_url' => 'fbook.com/user'
$social_data[1] ->
...etc
我不完全确定你获得network_type
和url的上下文,但它们都是数组,并且每个单独值的循环都是做什么的。没有剩下的代码,很难得到更具体的内容,但希望这会指向正确的方向。
答案 1 :(得分:0)
在您的示例中,我可以假设network_type
和network_url
输入如下:
<input type="text" name="network_type[]" />
和<input type="text" name="network_url[]" />
所以为了达到你想要的目的,你会:
<?php
$networkType = (array)$this->input->post('network_type', true);
$networkUrl = (array)$this->input->post('network_url', true);
$networkData = array();
if (($counter = count($networkType)) == count($networkUrl)) {
for ($i = 0; $i < $counter; ++$i) {
$networkData[] = array(
'network_type' => $networkType[$i],
'network_url' => $networkUrl[$i]
);
}
}
?>
并且应该给你想要的json 但是,这种方法有点笨拙且不可靠。
相反,我会定义输入字段,如:
<input type="text" name="network[0][network_type]" />
和<input type="text" name="network[0][network_url]" />
<input type="text" name="network[1][network_type]" />
和<input type="text" name="network[1][network_url]" />
我将生成php数组,如:
<?php
$networkData = (array)$this->input->post('network', true);
?>
只是我的两分钱:)
L.E:
要使其详细并从数组中创建std对象,您将:
$networkData = array();
if (($counter = count($networkType)) == count($networkUrl)) {
for ($i = 0; $i < $counter; ++$i) {
$obj = new StdClass();
$obj->network_type = $networkType[$i];
$obj->network_url = $networkUrl[$i];
$networkData[] = $obj;
}
}
print_r($networkData);