开发者

(PHP) values of an array - recursion

After hours going around in circles I gave up and ask for help.

I have an array which looks like:

[field01] => Array
    (
        [name] => test01
        [prefix] => C01
    )

[field02] => Array
    (
        [url] => http://www.url.com
        [user] => a_user
        [password] => a_password
    )

[filed03] => Array
    (
        [0] => Array
            (
                [id] => 1
                [Type] => standard
                [Name] =开发者_StackOverflow中文版> name
            )

        [1] => Array
            (
                [id] => 5
                [Type] => standard
                [Name] => name
            )

    )

Now I want to go through that array and get the following output as a return from a recursive function:

Array (
    [0] = "The values of field01: name, prefix - test01, C01"
    [1] = "The values of field02: url, user, password - http://www.url.com, a_user, a_password"
    [2] = "The values of field03: id, Type, Name - 1, standard, name"
    [3] = "The values of field03: id, Type, Name - 5, standard, name"
)

I have tried it with a recursive function but stuck with field03 to save the name.

Any help for that?

UPDTAE:

here is the array, so you don't have to write it:

$data['field01']['name'] = "field01";
$data['field01']['prefix'] = "C01";

$data['field02']['url'] = "http://www.url.com";
$data['field02']['user'] = "a_user";
$data['field02']['password'] = "a_password";

$data['field03'][0]['List_id'] = 1;
$data['field03'][0]['Type'] = "standard";
$data['field03'][0]['Name'] = "name";

$data['field03'][1]['List_id'] = 5;
$data['field03'][1]['Type'] = "standard";
$data['field03'][1]['Name'] = "name";

Thanks in advance!


<?php

$data['field01']['name'] = "field01";
$data['field01']['prefix'] = "C01";

$data['field02']['url'] = "http://www.url.com";
$data['field02']['user'] = "a_user";
$data['field02']['password'] = "a_password";

$data['field03'][0]['List_id'] = 1;
$data['field03'][0]['Type'] = "standard";
$data['field03'][0]['Name'] = "name";

$data['field03'][1]['List_id'] = 5;
$data['field03'][1]['Type'] = "standard";
$data['field03'][1]['Name'] = "name";

$text = '';
foreach ($data as $k => $fields) {
  if (isset($fields[0])) {
    foreach ($fields as $field) {
      $text .= 'The values of ' . $k . ': ' . traverse($field) . "\n";
    }
  } else {
    $text .= 'The values of ' . $k . ': ' . traverse($fields) . "\n";
  }
}

echo $text;


function traverse($fields) {
  $keys = array_keys($fields);
  $values = array_values($fields);
  return implode(', ', $keys) . ' - ' . implode(', ', $values);
}
?>


This assumes if there is an array of arrays, it is all arrays. In other words, you aren't mixing strings with arrays.

$resultArray = array();

function process($inputArray, $fieldName) {
    $result = array();
    $keys = array_keys($inputArray);
    if (!is_array($inputArray[0])) {
        $result[] = "The value of $fieldName: ".implode($keys,', '). ' - '. implode($inputArray, ', ');
    } else {
        foreach($inputArray as $arr) {
            $result = array_merge($result, process($arr, $fieldName));
        }
    }
    return $result;
}

foreach($data as $k=>$v) {
    $processed = process($v, $k);
    $resultArray = array_merge($resultArray, $processed);
}
print_r($resultArray);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜