如何在php中即兴创建这个嵌套for循环?
现在我正试图打印一个json对象,它看起来像这样如何在php中即兴创建这个嵌套for循环?,php,for-loop,nested,Php,For Loop,Nested,现在我正试图打印一个json对象,它看起来像这样 { "name" : "Zeninjor Enwemeka", "title" : "At Boston Forum, Federal And Local Officials Discuss Regions Transportation Future", "published" : "Friday, February 19, 2016", media: [ {audio : http://foo.bar.m
{
"name" : "Zeninjor Enwemeka",
"title" : "At Boston Forum, Federal And Local Officials Discuss Regions Transportation Future",
"published" : "Friday, February 19, 2016",
media: [
{audio : http://foo.bar.mp4, duration : 00:04:14}
{image : http://s3.amazonaws.com/media.wbur.org/wordpress/1/files/2015/08/0213_am-traffic02.jpg, credit : Jesse Costa/WBUR, caption : The Boston area ranks sixth for gridlock-plagued commutes in 2014. Here's morning traffic on Route 1 into Boston in February.}
]
},
{
"name" : "Zeninjor Enwemeka",
"title" : "Bostons Transportation Future? City Releases Report Detailing Publics Transit Goals",
"published" : "Friday, February 19, 2016",
},
{
"name" : "Ryan Caron King",
"title" : "Sen. Murphy Seeks Feedback From Fed Up Car Commuters",
"published" : "Friday, February 19, 2016",
},
{
"name" : "Patrick Skahill",
"title" : "Solar Installations Skyrocket, But Connecticut Consumers Still Need To Do Their Homework",
"published" : "Thursday, October 15, 2015",
media: [
{image : http://foo.bar.jpg, credit : AP, caption : Some news story caption}
]
}
这是我的代码:
if (mysqli_num_rows($result) > 0) {
$data_array = array();
while($row = mysqli_fetch_assoc($result)) {
//echo "Story id:" . $row["id"] . "<br>";
$data_array[$row["id"]]['name']=ucwords($row["name"]);
$data_array[$row["id"]]['title']=ucwords($row["title"]);
$date=date_create($row['published']);
$edited_date=date_format($date,"l, F d, Y");
$data_array[$row["id"]]['published']=$edited_date;
}
} else {
echo "0 results";
}
$json_media = json_decode($media,true);
foreach($json_media as $row) {
if ($data_array[$row['story']]['media'] == 0) {
$data_array[$row['story']]['media'] = array();
}
array_push($data_array[$row['story']]['media'], $row);
}
//print_r($data_array);
echo "\n\n";
$numItems = count($data_array);
$i=0;
foreach ($data_array as $key => $stories) {
echo "{\n";
foreach ($stories as $entity => $data) {
if ($entity != "media") {
echo "\t\"" . $entity."\" : \"".$data."\",\n";
} else {
echo "\tmedia: [\n";
foreach($data as $media => $media_element) {
foreach($media_element as $media_entities => $media_entity) {
if($media_entity == 'jpg') {
echo "\t{image : ".$media_element['href'].",";
echo " credit : ".$media_element['credit'].",";
echo " caption : ".$media_element['caption']."}\n";
}
else if($media_entity == 'mp4') {
echo "\t{audio : ".$media_element['href'].",";
echo " duration : ".gmdate("H:i:s",$media_element['duration'])."}\n";
}
}
}
echo "\t]\n";
}
}
if(++$i === $numItems) {
echo "}\n\n";
}
else {
echo "},\n\n";
}
}
这将导致相同的结果:
$json_media = json_decode($media,true);
$data_array = array();
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
//echo "Story id:" . $row["id"] . "<br>";
$data_array[$row["id"]]['name']=ucwords($row["name"]);
$data_array[$row["id"]]['title']=ucwords($row["title"]);
$date=date_create($row['published']);
$edited_date=date_format($date,"l, F d, Y");
$data_array[$row["id"]]['published']=$edited_date;
}
} else {
echo "0 results";
}
foreach($json_media as $row) {
$id = $row['story'];
if ( ! isset( $data_array[ $id ]['media'] ) ) {
$data_array[ $id ]['media'] = array();
}
$type = ( $row['type'] == 'jpg' ) ? 'image': 'audio';
// for more types, you could use a switch() here
$row[ $type ] = $row['href'];
if ( isset( $row['duration'] ) ) {
$row['duration'] = gmdate("H:i:s", $row['duration'] );
}
// remove all not needed data
unset( $row['story'], $row['type'], $row['href'] );
array_push( $data_array[ $id ]['media'], $row );
}
echo json_encode( $data_array );
$json\u media=json\u decode($media,true);
$data_array=array();
如果(mysqli_num_行($result)>0){
while($row=mysqli\u fetch\u assoc($result)){
//echo“故事id:.”行[“id”]。“
”;
$data_数组[$row[“id”]['name']=ucwords($row[“name”]);
$data_数组[$row[“id”]['title']=ucwords($row[“title”]);
$date=创建日期($row['published']);
$edited_date=日期格式($date,“l,F,d,Y”);
$data\u数组[$row[“id”]['published']=$edited\u日期;
}
}否则{
回显“0结果”;
}
foreach($json\u媒体作为$row){
$id=$row['story'];
如果(!isset($data_array[$id]['media'])){
$data_数组[$id]['media']=array();
}
$type=($row['type']='jpg')?'image':'audio';
//对于更多类型,可以在此处使用switch()
$row[$type]=$row['href'];
如果(isset($row['duration'])){
$row['duration']=gmdate(“H:i:s,$row['duration']);
}
//删除所有不需要的数据
未设置($row['story'],$row['type'],$row['href']);
数组推送($data_数组[$id]['media'],$row);
}
echo json_encode($data_数组);
基本上,当媒体数据被添加到
$data\u数组中时,我正在改进/设置媒体数据,这样,您就不必再次遍历所有内容:)为什么echo
每个项目,而不仅仅是echo json\u encode($data\u数组)
?(或者var\u dump()
的print\u r()
)基本上,您可以有两个步骤:1)从数据库获取数据,检查/改进某些值,并将其添加到$data\u数组
然后2)echo json\u encode($data\u数组)代码>这就是问题所在-并非所有数据都来自数据库。一半来自db,另一半来自api。我正在尝试合并。在我的第二个数组中,我尝试合并两个数组。还是要避免这么多for循环?你能举一个非DB数组的(缩短的)例子吗?(我猜$media
?)我可能可以改进合并部分-但是访问部分变脏了-我的意思是循环太多了!完美的非常感谢菲利普!
$json_media = json_decode($media,true);
$data_array = array();
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
//echo "Story id:" . $row["id"] . "<br>";
$data_array[$row["id"]]['name']=ucwords($row["name"]);
$data_array[$row["id"]]['title']=ucwords($row["title"]);
$date=date_create($row['published']);
$edited_date=date_format($date,"l, F d, Y");
$data_array[$row["id"]]['published']=$edited_date;
}
} else {
echo "0 results";
}
foreach($json_media as $row) {
$id = $row['story'];
if ( ! isset( $data_array[ $id ]['media'] ) ) {
$data_array[ $id ]['media'] = array();
}
$type = ( $row['type'] == 'jpg' ) ? 'image': 'audio';
// for more types, you could use a switch() here
$row[ $type ] = $row['href'];
if ( isset( $row['duration'] ) ) {
$row['duration'] = gmdate("H:i:s", $row['duration'] );
}
// remove all not needed data
unset( $row['story'], $row['type'], $row['href'] );
array_push( $data_array[ $id ]['media'], $row );
}
echo json_encode( $data_array );