如何输出多维数组?

时间:2017-04-11 02:16:29

标签: php

我是php中的多维数组的新手,我读了这个SO answer,我尝试创建我的二维数组但是如何输出它?

$nPost = array("orange, table");
$count_values = array("fruit, forniture");
$final_array = array(array($count_values), array($nPost));

输出必须是:

Fruits: orange, Forniture: table

尝试

print_r($final_array);

但我得到了

Array ( [0] => Array ( [0] => Array ( [0] => fruit, forniture ) ) [1] => Array ( [0] => Array ( [0] => orange, table ) ) )
0 fruit, forniture

更新

现实生活中的完整代码是(代码注释中的解释):

    <?php
                      $stack = array();
$userID = array();
$nPost = array();


$blogusers = get_users( 'orderby=nicename&role=author' );

foreach ( $blogusers as $user ) {

   // get the language list for each user, and push to array

    $descTokens = explode(',', $user->user_description);
    $stack = array_merge($stack, $descTokens);

   // get the ID for each user, and push to the array
   // get the number of posts for each user ID and push to array

    $the_user_id = $user->ID;
    $numPosts = count_user_posts( $the_user_id );
    array_push($userID, $the_user_id);
    array_push($nPost, $numPosts);
 }

   // get the count for each language by counting the duplicate strings

 $count_values = array();
 foreach ($stack as $a) {
   @$count_values[$a]++;
 }
 $total_duplicates = 0;
 foreach ($count_values as $a) {
   if($count_values[$a]<=1){
      unset($count_values[$a]);
   } else{
      $total_duplicates += $count_values[$a];
   }
  }

 for($i = 0; $i < count($count_values); $i++){
   $final_array[$count_values[$i]] = $nPost[$i];
 }

foreach($final_array as $label => $item){
   echo "$label: $item, ";
}
    ?>
          // This gives me a correct result but not the n. posts
    <ul>
      <?php 
          foreach ($count_values as $key=>$count) { 
              echo '<li>'.$key.' '.$count.'</li>'; 
          }
      ?>
     </ul>

我们要努力实现的目标是:

  • 1法语,有2个帖子
  • 3个英文,5个帖子

2 个答案:

答案 0 :(得分:4)

<?php 

class User {

    public $id;
    public $numPosts;
    public $languages = array();

    public function __construct($id, $numPosts, $lang = array()){
        $this->id = $id;
        $this->numPosts = $numPosts;
        $this->languages = $lang;
    }
}

$users = array();

$john = new User(1, 4, array("English", "French"));
$fred = new User(2, 3, array("English"));
$dave = new User(3, 7, array("German", "French", "Spanish"));

$users[] = $john;
$users[] = $fred;
$users[] = $dave;

$langPostCount = array();
$langUserCount = array(); 

foreach($users as $user){
    foreach($user->languages as $lang){
        $langUserCount[$lang] += 1; // this is what you already have from $count_values
        //$langPostCount[$lang] += $user->numPosts; // can be done here but we'll do another loop
    }
}

/* 
 * the following can be done in the above loop, but you already have that functionality in your code
 * just need to do another loop through your languages, tallying the number of posts in that language
 * keep in mind this is not entirely accurate as your users have multiple languages. they might have
 * one post in english and 4 in french. A better way to do this would be to select the number of posts
 * in each language directly from the posts database.
 */

foreach($langUserCount as $lang => $userCount){
    foreach($users as $user){
        if(in_array($lang, $user->languages)){
            $langPostCount[$lang] += $user->numPosts;
        }
    }
}

echo "<ul>";
foreach($langUserCount as $lang => $userCount){
    echo "<li>$userCount $lang with " . $langPostCount[$lang] . " posts.</li>";
}
echo "</ul>";

?>

<强>输出

  • 2英文,7个帖子。
  • 2法语,有11个帖子。
  • 1德语,7个帖子。
  • 1个西班牙语,有7个帖子。

如您所见,并非完全准确。你最好通过查询你的帖子数据集来获得帖子数,而不是从下往上工作。

试一下

在顶部的foreach循环中添加一个新的计数,并在结尾处更改ul循环。

$postsPerLanguage = array(); // add this

foreach ( $blogusers as $user ) {

    $descTokens = explode(',', $user->user_description);
    ...
    $numPosts = count_user_posts( $the_user_id );
    ...
    // add this loop
    foreach($descTokens as $lang){
        $postsPerLanguage[$lang] += $numPosts;  
    }
 }

...

<ul>
    <?php 
        foreach ($count_values as $key=>$count) { 
            echo '<li>'.$key.' '.$count.' with '. $postsPerLanguage[$key] .' posts</li>'; 
        }
    ?>
</ul>

答案 1 :(得分:0)

您的输出不需要多维数组,您可以像这样实现:

$final_array = array('Fruits'=> 'orange', 'Furniture'=> 'table')

但是,例如,如果你有多个水果或家具,你可以做这样的事情:

$final_array = array('Fruits'=> array('orange', 'apple'), 'Furniture'=> array('table', 'sofa'))

你可以像这样访问苹果:

echo $final_array['Fruits'][1];

print_r($final_array)我们有这个:

[Fruits] => (
    [0] => orange,
    [1] => apple
)
[Furniture] => (
    [0] => table,
    [1] => sofa
)