У меня есть такой массив:
$string = array(
"name" => "Mike",
"country"=> "UK",
"prefers" => array( "coffee", "milk", "bananas"),
"age"=> "25""children => array( Jack, Jill)
);
Как мне заполнить «таблицу» всеми параметрами, чтобы иметь структуру, которая бы выглядела так:
array1 = (Mike, UK, coffee, 25, Jack)
array2 = (Mike, UK, milk, 25, Jack)
array3 = (Mike, UK, bananas, 25, Jack)
array4 = (Mike, UK, coffee, 25, Jill)
array5 = (Mike, UK, milk, 25, Jill)
array6 = (Mike, UK, bananas, 25, Jill)
Здесь мне нужно иметь 1 * 1 * 3 * 1 * 2 = 6 строк и структуру из 5 столбцов, без пустых ячеек.
Я испортил, впервые, потому что мои решения не генерировали все перестановки. Вот еще один шаг, который должен быть правильным общим решением:
function arrayCrossProduct( array $data ) {
$rowCount = 1; // keep track of total rows we need to generate
// the reference is just used for convenience to cast to and reset the array
foreach( $data as &$datum ) {
$datum = (array) $datum; // cast to array
$rowCount *= count( $datum ); // multiply total rows with current element count
reset( $datum ); // reset the array, just to be sure
}
$result = array();
while( $rowCount-- > 0 ) {
$row = array();
foreach( $data as &$datum ) { // reference necessary to keep track of array pointer
$row[] = current( $datum ); // generate new row
}
$result[] = $row; // add row to result
// find the first element that is advanceable
foreach( $data as &$datum ) { // reference necessary to keep track of array pointer
next( $datum );
// if it advanced/not at the end: break
if( !is_null( key( $datum ) ) ) {
break;
}
reset( $datum ); // else rewind the array and continue
}
}
return $result;
}
Вы можете просмотреть это работает онлайн, с некоторыми образцами данных и форматированным выводом.
Ваш вопрос очень расплывчатый, но если это то, что я считаю, то ответ будет использовать json_encode($string,TRUE);
Вы ищете что-то подобное?
<?php
// Print the array in a nice form
function print_r2 ($Array) {
echo "<pre>";
print_r($Array);
echo "</pre>"; }$array1[] = array(Mike, UK, coffee, 25, Jack);
$array1[] = array(Mike, UK, milk, 25, Jack);
$array1[] = array(Mike, UK, bananas, 25, Jack);
$array1[] = array(Mike, UK, coffee, 25, Jill);
$array1[] = array(Mike, UK, milk, 25, Jill);
$array1[] = array(Mike, UK, bananas, 25, Jill);foreach($array1 as $array6){
//first create multidimentional arrays to separate duplicates using values as keys.
if(!in_array($array6[2],$parray[$array6[0]][$array6[1]][$array6[3]][prefers])) {
$parray[$array6[0]][$array6[1]][$array6[3]][prefers][]=$array6[2];}
if(!in_array($array6[4],$parray[$array6[0]][$array6[1]][$array6[3]][children])) {
$parray[$array6[0]][$array6[1]][$array6[3]][children][]=$array6[4];}
}
print_r2($parray);
foreach($parray as $name => $value){
$array[name] = $name;
foreach($value as $country => $value2) {
$array[country] = $country;
foreach($value2 as $age => $value3 ){
$array[prefers] = $value2[$age][prefers];
$array[age] = $age;
$array[children] = $value2[$age][children];
}
}
}
print_r2($array);
//OR
echo json_encode($array);
?>
Я думаю, что это больше похоже на то, что вы ищете с вашим пересмотренным вопросом. Я только что добавил противоположную цель внизу моего первоначального ответа.
<?php
// Print the array in a nice form
function print_r2 ($Array) {
echo "<pre>";
print_r($Array);
echo "</pre>"; }$array1[] = array(Mike, UK, coffee, 25, Jack);
$array1[] = array(Mike, UK, milk, 25, Jack);
$array1[] = array(Mike, UK, bananas, 25, Jack);
$array1[] = array(Mike, UK, coffee, 25, Jill);
$array1[] = array(Mike, UK, milk, 25, Jill);
$array1[] = array(Mike, UK, bananas, 25, Jill);foreach($array1 as $array6){
//first create multidimentional arrays to separate duplicates using values as keys.
if(!in_array($array6[2],$parray[$array6[0]][$array6[1]][$array6[3]][prefers])) {
$parray[$array6[0]][$array6[1]][$array6[3]][prefers][]=$array6[2];}
if(!in_array($array6[4],$parray[$array6[0]][$array6[1]][$array6[3]][children])) {
$parray[$array6[0]][$array6[1]][$array6[3]][children][]=$array6[4];}
}
print_r2($parray);
foreach($parray as $name => $value){
$array[name] = $name;
foreach($value as $country => $value2) {
$array[country] = $country;
foreach($value2 as $age => $value3 ){
$array[prefers] = $value2[$age][prefers];
$array[age] = $age;
$array[children] = $value2[$age][children];
}
}
}
print_r2($array);
//OR
echo json_encode($array);
echo"<br />";echo"<br />";
//** now backwards**
echo"<br />";
echo"<br />";
$no=1;
foreach($array[children] as $children ) {
foreach($array[prefers] as $prefers ) {
print("array".$no." = (".$array[name].", ".$array[country].",".$prefers.",".$array[age].",".$children.")<br />\n");
$no++;
}
}?>