php array output problem - php
In php is there a function to increment the
values of subsequent values twice(*2) in an array
column based on an initial value?
$beta = array(
array('5', '1''1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1'),
array('5','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2'),
array('5','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2'),
array('5','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2'),
array('5','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2'),
array('5','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2'),
array('5','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2'),
array('5','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2'),
array('5','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2'),
array('5','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2','2')
);
/*Example: '5' will be '10' (5*2 =10 and output 10 to web)
'2' will be '4' (2*2 = 4 and output 4 to web)
The next '2' will be '16' (4*2 = 8 and output 8 to web)
The next '2' will be '32' (8*2 = 16 and output 16 to web)
And so forth? */
Furthermore is there an easier way to construct this array, cause I firmly believe there is, but not something too complicated in terms of construct such that a noob will not understand it, again thanks.
[Disclaimer: I have spent 3 days trying to understand arrays, I now understand them; however, I am still new and am currently having some issues when trying to manipulate the values in my array and output them to the web.And I am still pretty sure I have a lot to read and learn, so please no flamers, I just need some help, found this problem in this C++ book:
[http://books.google.com/books?id=4Fn_P7tdOZgC&pg=PT424&lpg=PT424&dq=subsequent+++column+is+twice+the+value&source=bl&ots=gSvQ_LhxoI&sig=dG_Ilf1iLO86lqX936cT1PpkPc8&hl=en&ei=OEEBS_eODYyotgOFtJD3CQ&sa=X&oi=book_result&ct=result&resnum=1&ved=0CAgQ6AEwAA#v=onepage&q=subsequent%20%20%20column%20is%20twice%20the%20value&f=false][1]
You can try array_map:
<?php
function increase($n) {
return is_array($n) ? array_map('increase', $n) : $n * 2;
}
$new_beta = array_map("increase", $beta);
As for constructing the array, there are other methods to do so but I believe this is the most performent and clean.
Here is an answer for each question in that section of the book, enjoy!
<?php
// Declare an array alpha of 10 rows and 20 columns of type int
// Initialise the array alpha to 0
$alpha = array(array());
for($i = 0; $i < 10; $i++)
{
for($j = 0; $j < 20; $j++)
{
$alpha[$i][$j] = 0;
}
}
// Store 1 in the first row and 2 in the remaining rows
for($i = 0; $i < 10; $i++)
{
for($j = 0; $j < 20; $j++)
{
if($i == 0)
{
$alpha[$i][$j] = 1;
}
else
{
$alpha[$i][$j] = 2;
}
}
}
// Store 5 in the first column, and make sure that the value in
// each subsequent column is twice the value in the previous column
// (Beware this doesn't build off the initial value of 5 in the first
// column but the previously set values above)
for($i = 0; $i < 10; $i++)
{
for($j = 0; $j < 20; $j++)
{
if($j == 0)
{
$alpha[$i][$j] = 5;
}
else
{
if($j - 1 >= 1)
{
$alpha[$i][$j] = $alpha[$i][$j-1] * 2;
}
}
}
}
// Print the array alpha one row per line
print "Printing the array alpha one row per line:<br/>";
for($i = 0; $i < 10; $i++)
{
for($j = 0; $j < 20; $j++)
{
print "[". $alpha[$i][$j] ."] ";
}
print "<br/>";
}
print "<br/>";
// Print the array alpha one column per line
print "Printing the array alpha one column per line:<br/>";
for($j = 0; $j < 20; $j++)
{
for($i = 0; $i < 10; $i++)
{
print "[". $alpha[$i][$j] ."] ";
}
print "<br/>";
}
?>
Related
Combining and Permuting items of two different arrays in PHP
How do I return all possible combinations [12345], [12354] up to [54312], [54321] without having to run 120 for...loop as in the case of combining a 2-item array in the code below? To return all possible combinations from the given array $word = [1,2], //break the array into 2 separate arrays $arr1 = $word[0]; $arr2 = $word[1]; //computer for first array item...each item will have 2 loops for($i=0; $i<count($arr1); $i++){ for($j=0; $j<count($arr2); $j++){ $ret = $arr1[$i] . $arr2[$j]; array_push($result, $ret); } } //computer for second array item..each item will have 2 loops for($i=0; $i<count($arr2); $i++){ for($j=0; $j<count($arr1); $j++){ $ret = $arr2[$i] . $arr1[$j]; array_push($result, $ret); } } //display the result for ($i = 0; $i < count($result); $i++){ echo result([$i]; } The above code works well. But for a 5-item array [1,2,3,4,5], it will require about (5 items * 24 loops) = 120 loops.
As seen, you wanted to split 2 strings into chars and obtain all combination by 2 chars: first form blank1 and second from blank2. Instead of doing the combination manually use a regular for-loop. $result = array(); for ($i = 0; $i < count($blank1); $i++) { for ($j = 0; $j < count($blank2); $j++) { //set combination $aux = $blank1[$i].$blank2[$j]; array_push($result, $aux); } } //result should be populated with combination of 2 //just list it and use as need for ($i = 0; $i < count($result); $i++) { echo $result[$i]; } //same with stored or checking on db : use loops For multiple combination, use more nested loops eg: [blank1][blank2][blank1] - 3 combination $result = array(); //1 for ($i = 0; $i < count($blank1); $i++) { //2 for ($j = 0; $j < count($blank2); $j++) { //3 for ($k = 0; $k < count($blank1); $k++) { //set combination $aux = $blank1[$i].$blank2[$j].$blank1[$k]; array_push($result, $aux); } } } Same as any number you wanted ! It will be a little annoying if have to write many loops but note while can be used with an adequate algorithm. But for the moment just keep as simple as you can and get the desired result.
Add all the previous numbers in a for loop to get the current number
I have this for loop: for($i = 1; $i <= 7; $i++) { echo $i . "<br>"; } Which outputs: 1 2 3 4 5 6 7 Now what I want is to add all the previous numbers on each loop. So the output should be: 1 2 // add all above to get this number 3 // add all above to get this number 6 // add all above to get this number 12 // add all above to get this number 24 // add all above to get this number 48 // add all above to get this number 96 // add all above to get this number ...etc The first and second number doesn't necessarily have to be in the loop, that can be defined manually outside. What I don't want is to add the value of $i on each loop, but to add all the previous numbers on each loop. I have tried summing up using this code: $sum = 0; for($i = 1; $i <= 5; $i++) { $sum = $sum + $i; echo $sum . "<br>"; } But I get this output: 1 3 6 10 15 21 28 How can I achieve my desired output?
Try this <?php $results = []; for ($i = 0; $i <= 7; $i++){ $currentResult = 0; if ($i < 2){ $currentResult = $i+1; } else{ foreach($results as $currenNumber){ $currentResult += $currenNumber; } } echo $currentResult . '<br>'; $results[] = $currentResult; } ?>
<?php $value = 0; for($i = 1; $i <= 8; $i++) { if($value < 3){ $value = $value + 1; } else{ $value = $value * 2; } echo $value . '<br>'; } ?>
How to compare every value in a for loop?
I have a multidimentional array of 5 items and I want that my loop would compare it like: 1 -> 2, 1 -> 3, 1 -> 4, 1 -> 5, 2->1, 2->3, 2->4, 2->5......// so on and 5 -> 4 in the end. The problem is that after my array $i value matches 1 and $j value matches 3, the unset is done and the $i value becomes 2 (which is correct) and $j value becomes 4 instead of 3. Could someone tell me why and what I'm doing wrong? My loop is: for ($i = 0; $i <= count($myArray); $i++) { for ($j = $i+1; $j <= count($myArray); $j++) { if ( // condition 1 && // condition 2 ) { unset($myArray[$i]); $i++; } } }
I think that's the problem is when you unset the element in the array, you increment the counter of the loop $i. In this way, the elements of the array that are not configured are removed, this empty array position will be maintained, it will not be reordered, you will have to do it manually or using array_values method. In the last tour of the array, it will break because you are comparing the number of array elements as equal. You must use index < count($array) The code would be like this: for ($i = 0; $i < count($myArray); $i++) { for ($j = $i+1; $j < count($myArray); $j++) { if ( // condition 1 && // condition 2 ) { unset($myArray[$i]); // $i++; } } }
try something like this for ($i = 0; $i <= count($myArray); $i++) { for ($j = 0; $j <= count($myArray); $j++) { if ($j!=$i) { if ( // condition 1 && // condition 2 ) { unset($myArray[$i]); $i++; } } } }
$temp = $myArray; for ($i = 0; $i <= count($myArray); $i++) { for ($j = $i + 1; $j <= count($myArray); $j++) { if ( // condition 1 && // condition 2 ) { unset($temp[$i]); $i++; } } } print_r($temp); Your result is in $temp. So here indexes wont get hampered, you actually are applying all operation on $temp and normally traversing $myArray.
To be honest, I do not know why nobody has yet advise to use nested foreach, since you all noticed there was a problem with array size. foreach ($numbers as $number_horizontal_parsing) { foreach ($numbers as $number_vertical_parsing) { if ($number_horizontal_parsing != $number_vertical_parsing) { //do your stuff in your case it seems you want to compare both variables } } }
For loop (php) that results in this: 12345678910987654321
My niece is trying to create one for-loop (php), that results in this: * 12345678910987654321 example for loop she tried: for ($i = 1; $i <= 10; $i++ , $i = 10; $i <= 1; $i--) { echo $i . ' '; } She can only use if's and elseif's. I'm not a programmer and can't really help her. Any ideas how this could be achieved in php? Any information would be greatly appreciated.
The key is to add a variable instead of a number, then reverse that number when $i hits 10. for($i = 1, $j = 1; $i> 0; $i+=$j) // Start i at 1, and j at 1 { echo $i; if($i == 10) $j = -1; // i has hit 10, so use -1 to start subtracting }
Another possibility is to loop up to 20, printing $i for the ascending part and 20 - $i for the descending. for ($i = 1; $i < 20; $i++) { if ($i <= 10) { echo $i; } else { echo 20 - $i; } }
I need to find all amicable numbers up to a certain number
Here is my code: $n = 300; $set = 0; $set2 = 0; for($i = 1; $i<$n; $i++) { for($j = 1; $j <$i; $j++) { $qol = $i % $j; if($qol == 0) { $set += $j; } } for($s=1; $s<$set; $s++) { $qol2 = $set % $s; if($s == 0) { $set2 += $s; } } if($set2 == $i) { echo "$set and $i are amicable numbers</br>"; } } I do not know what the heck the problem is! FYI: 220 and 284 are an example of amicable numbers. The sum of the proper divisors of one number are equal to other number and vice versa (wiki).
I am having troubles following your logic. In your code how would $set2 == $i ever be true? Seems to me that $i would always be greater. I would do it the following way: First make a separate function that finds the sums of the proper divisors: // Function to output sum of proper divisors of $num function sumDiv($num) { // Return 0 if $num is 1 or less if ($num <= 1) { return 0; } $result = 1; // All nums divide by 1 $sqrt = sqrt($num); // Add divisors to result for ($i = 2; $i < $sqrt; $i++) { if ($num % $i == 0) { $result += $i + $num / $i; } } // If perfect square add squareroot to result if (floor($sqrt) == $sqrt) { $result += $sqrt; } return $result; } Next check each iteration for a match: $n = 1500; for ($i = 1; $i < $n; $i++) { // Get sum of proper devisors of $i, and sum of div. of result. $currentDivs = sumDiv($i); $resultDivs = sumDiv($currentDivs); // Check for a match with sums not equal to each other. if ($i == $resultDivs && $currentDivs != $resultDivs) { echo "$i and $currentDivs are amicable numbers<br>"; } } Here a functioning phpfiddle. Warning: Large numbers will take very long to process!